Ole*_*rov 8 python installation setuptools
说我想安装pyodbc.它不能在某些Windows机器上构建,但有另一种选择 - pypyodbc这是纯粹的python实现pyobdc.
是否有指定的方式install_requires=["pyobdc"]对setuptools.setup与落回pypyodbc,如果没有安装前包?
UPD:我针对这种特殊情况的解决方案:
import sys
from setuptools import setup
if sys.platform.startswith("win"):
pyodbc = "pypyodbc>=1.2.0"
else:
pyodbc = "pyodbc>=3.0.7"
...
setup(
...
install_requires=[pyobdc]
)
Run Code Online (Sandbox Code Playgroud)
但我仍然在寻找更通用的解决方案.
做你已经在做的事情似乎是一个普遍的建议,但由于这个问题是这类问题的热门谷歌,我会指出它install_requires支持PEP 508 中指定的相当复杂的迷你语言:
install_requires = [
'pypyodbc>=1.2.0;platform_system=="Windows"',
'pyodbc>=3.0.7;platform_system!="Windows"'
]
Run Code Online (Sandbox Code Playgroud)
在对相关问题的评论中,用户Marius Gedminas指出,install_requires在代码中计算可能会产生一些不利影响,因此应首选上述方法以避免该问题。
(另一方面,如果您必须支持旧版本的. ,https: //hynek.me/articles/conditional-python-dependencies/ 会感叹一些非常严重的可移植性问题setuptools。)