python - 如何通过 pip 包名称使用 setuptools 指定两个替代要求?

标签 python python-2.7 tensorflow setuptools distutils

我想使用 setuptools 编写一个 setup.py 文件。我的包依赖于 tensorflow,但是有两个不同的 pip 包可以满足要求,tensorflowtensorflow-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/

相关文章:

python - 在 python 上使用 selenium 打开多个网站

python - python列表中如何实现数据查找

tensorflow - Tensorflow如何分配Ops在GPU上运行?

python - Tensorflow - 重用模型 InvalidArgumentError

python - 如何让TensorFlow的map()函数返回多个值?

python - python断言失败时如何退出?

python - Django:允许安全的 html 标签

python - 使用 pandas 对数据集进行因式分解

python - 如何避免从 python 中的方法返回语句中命名未使用的变量

python - 为什么 Python 的 base64.b64decode() 会忽略字符串末尾的乱码?