我正在构建一个Python库,它将作为Python包部署在PyPI上。我使用的构建系统工具是Setuptools。该库应该作为依赖项与TensorFlow一起使用,因此将其添加到项目中非常简单:
[project]
...
dependencies = [
"tensorflow >= 2.11.0",
]
现在的问题是,我的库可以同时使用tensorflow
和tensorflow-gpu
,我想提供一个python包,默认情况下,它具有tensorflow
作为依赖项,但允许用户选择不同的“风味”(在我的情况下,使用tensorflow-gpu
并利用GPU进行Tensor计算)。
我已经浏览了Setuptools的文档,但我找不到任何帮助。作为一个可能的解决方案,我认为使用部分[project.optional-dependencies]
,可以解决我的问题,例如设置一个字段如下:
[project.optional-dependencies]
gpu = ["tensorflow-gpu >= 2.11.0"]
我可以运行pip install myLibrary[gpu]
来包含可选的依赖项,但是,必需的依赖项(即tensorflow
)将永远安装,这不是我所期望的行为。
解决这个问题的另一个激烈的方法是发布两个不同的库(myLibrary
和myLibrary-gpu
),但我认为这不是一个优雅的管理这种情况的方法,特别是因为库中的代码对于两个版本来说是完全相同的。
任何帮助,将非常感谢!
1条答案
按热度按时间aoyhnmkz1#
我遇到了同样的问题,很难找到一个优雅的解决方案。这是我目前为止最好的解决方案。将下面的代码复制到
setup.py
中并修改它,以便您可以根据子流程输出在依赖项列表中追加正确的TensorFlow包。由于python3+附带了
subprocess
:注意:这不是一个通用的解决方案,因为由于权限问题,运行
nvidia-smi
可能不适合每个人。