如何为 Python 包指定外部系统依赖项?

How to specify external system dependencies to a Python package?

在编写 Python 包时,我知道如何在 setup.py 文件中指定其他必需的 Python 包,这要归功于 setuptools.setup 中的字段 install_requires ].

但是,我不知道如何指定 外部系统依赖项 不是 Python 包,即 gitcmake(示例)我的包裹可以通过 subprocess.callsubprocess.Popen?

调用

我是否必须手动检查 setup.py 文件中命令的可用性,或者是否有指定系统要求的奇特方法?

编辑: 我只想检查外部工具是否可用,如果不可用,请邀请用户(自己)安装它们。我不想在安装包时管理外部工具的安装。

贡献总结:好像setuptools不支持这个,在运行时做检查会更安全(c.f .评论和答案)。

我的建议是检查那些 外部依赖项 不在 install-time 而在 run-time。在每个 运行 的开头,或者可能在第一个 运行.

您确实可以将此添加到您的 setup.py,但 setup.py 并不总是在 install-time 执行:例如,如果您的项目打包为 wheel 那么它甚至根本不包含 setup.py 文件。即使您没有将您的项目作为轮子分发,如果我没记错的话,pip 也倾向于在本地构建一个轮子并将其重新用于后续安装。

因此,尽管可以在安装时将此类检查作为安装脚本的一部分进行(前提是您可以保证 setup.py 的存在和执行),但我会说 run-time是一个更安全的选择。