我想使用 setuptools
编写一个 setup.py
文件。我的包依赖于 tensorflow
,但是有两个不同的 pip 包可以满足要求,tensorflow
和 tensorflow-gpu
。如果我只是将 tensorflow
放在我的 setup(..., install_requires=["tensorflow"])
中,那么如果用户安装了 ,安装将失败>tensorflow-gpu
他们系统上的 pip 包。
imp
模块不能用于检查(如本回答:How to check if a python module exists without importing it ),因为该模块的import 名称是tensorflow
无论用户安装了哪个 pip 包。那么 setuptools(以及 distutils)如何检测安装了哪个 pip 包?我已经深入了解了源代码,但找不到它检查的地方。
*请注意,我不打算破解设置工具来接受其中任何一个。我只想知道它使用什么方法来检测包,所以我可以在我的 setup.py
中使用相同的方法手动将 install_requires 参数设置为正确的版本。 (即像这样:Alternative dependencies (fall back) in setup.py)
最佳答案
我answered最近有一个类似的问题。您需要将一个 TF 与另一个区分开来。我对 TF 的了解不足以帮助解决细节问题,但大部分代码应该是这样的:
kw = {}
try:
import tensorflow
except ImportError: # There is no one, declare dependency
kw['install_requires'] = ['tensorflow']
else:
if is_gpu(tensorflow):
kw['install_requires'] = ['tensorflow-gpu']
else:
kw['install_requires'] = ['tensorflow']
setup(
…
**kw
)
关于python - 如何通过 pip 包名称使用 setuptools 指定两个替代要求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44251532/