setup.py中的替代依赖项(后退)

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)

但我仍然在寻找更通用的解决方案.

tri*_*eee 8

做你已经在做的事情似乎是一个普遍的建议,但由于这个问题是这类问题的热门谷歌,我会指出它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。)

  • 到目前为止,我还没有找到像 `foo || 这样的语法的任何规范或实际示例。Debian 软件包中的 bar 语法表示您想要安装 `foo` 或 `bar`。 (2认同)