requirements.txt-如何标记替代软件包

phs*_*ron 6 python pip tensorflow

我正在编写一个依赖的项目tensorflow,但是可以通过以下两个pip程序包之一来提供:tensorflowtensorflow-gpu。我的项目无论哪种都能正常运行,但是我不希望在没有gpu支持的机器上运行它的人必须安装额外的开销,但是我仍然希望在具有gpu支持的机器上运行的人能够利用这一点。有没有一种方法,以纪念我的requirements.txt文件,我需要要么 tensorflow tensorflow-gpu而不是两者兼而有之?

编辑:

在这种特定情况下,我应该注意,从程序员的角度来看,两者tensorflowtensorflow-gpu都是相同的,因为它们都提供了tensorflow具有相同功能/类/方法等的模块,而不同之处仅在于tensorflow-gpuGPU加速的不同。那我遇到的问题是,如果我把tensorflowrequirements.txt后来为了与GPU加速运行,用户必须做的pip install -r requirements.txt && pip uninstall tensorflow && pip install tensorflow-gpu这是不理想的,如果我不是把tensorflow-gpurequirements.txt,那么它将需要一堆不必要的系统库(CUDNN等),并且对于非GPU用户不可用。

再次编辑

作为解决方法,我决定提供两个不同的需求文件requirements.txtrequirements-gpu.txt,这两个文件都包含一个共享文件-r .requirements-core.txt并添加各自的tensorflow版本。这样,想要GPU支持的人可以pip install -r requirements-gpu.txt但标准pip install -r requirements.txt仍然可以为每个人开箱即用。

Gui*_*zzi 5

您不能使用来限制下载软件包的条件requirements.txt,但是您可以执行以下解决方案之一:

1-将软件包tensorflow和tensorflow-gpu都安装为依赖项,并进行try /,选择要实际使用的软件包,例如:

tensorflow = null

try:
  tensorflow = __import__("tensorflow-gpu")
  tensorflow.operation_that_requires_gpu()
except:
  tensorflow = __import__("tensorflow")
enter code here
Run Code Online (Sandbox Code Playgroud)

2-在您的项目上,您要求客户端将依赖关系直接传递给您:

def my_function_that_uses_tensorflow(tensorflow):
  # do stuff

from my_module import my_function_that_uses_tensorflow
import tensorflow # or tensorflow = __import__("tensorflow-gpu")
my_function_that_uses_tensorflow(tensorflow)
Run Code Online (Sandbox Code Playgroud)

3-如果tensorflow-gpu和tensorflow都tensorflow在您的站点软件包上安装了相同名称的软件包,那么我的建议是尝试/ except,如我在选项1上说的那样,但不要包括tensorflow-gpu或tensorflow作为包的依赖项(将其作为“对等依赖项”进行处理,使用该包的代码应将其包括为它们的依赖项才能使用):

try:
  import tensorflow
except:
  raise ImportError('You need to include tensorflow or tensorflow-gpu as a dependency in order to use this package')
Run Code Online (Sandbox Code Playgroud)