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

Car*_*eil 5 python distutils setuptools python-2.7 tensorflow

我想setup.py使用 写一个文件setuptools。我的包依赖于tensorflow,但是有两个不同的 pip 包可以满足要求,tensorflowtensorflow-gpu。如果我只是输入tensorflowmy setup(..., install_requires=["tensorflow"]),那么如果用户tensorflow-gpu在其系统上安装了 pip 软件包,安装将会失败。

imp模块不能用于检查(如本答案中:How to check if a python module isn’t importing it),因为模块的导入tensorflow名称与用户安装的pip 包无关。那么 setuptools(以及 distutils)如何检测安装了哪个 pip 包?我已经对源代码进行了一些挖掘,但找不到它检查的地方。

*注意,我不打算破解安装工具来接受其中任何一个。我只想知道它使用什么方法来检测包,因此我可以在 my 中使用相同的方法setup.py手动将 install_requires 参数设置为正确的版本。(即像这样:setup.py 中的替代依赖项(回退)

phd*_*phd 2

我最近回答过类似的问题。您需要区分一个 TF 和另一个 TF。我对 TF 的了解不够,无法帮助了解细节,但大部分代码应该是这样的:

\n\n
kw = {}\ntry:\n    import tensorflow\nexcept ImportError:  # There is no one, declare dependency\n    kw[\'install_requires\'] = [\'tensorflow\']\nelse:\n    if is_gpu(tensorflow):\n        kw[\'install_requires\'] = [\'tensorflow-gpu\']\n    else:\n        kw[\'install_requires\'] = [\'tensorflow\']\n\nsetup(\n    \xe2\x80\xa6\n    **kw\n)\n
Run Code Online (Sandbox Code Playgroud)\n