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

Odi*_*din 5 python setuptools setup.py python-3.x python-packaging

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

但是,我不知道如何指定不是 Python 包的外部系统依赖项,即我的包可以通过or调用的诸如gitor cmake(示例)之类的命令?subprocess.callsubprocess.Popen

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

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

贡献摘要:似乎setuptools不支持这一点,在运行时进行检查会更安全(参见评论和答案)。

sin*_*roc 6

我的建议是检查这些外部依赖项是否存在,而不是在安装时而是在运行时。要么在每次运行开始时,要么在第一次运行时。

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

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