如何为 Python 包指定外部系统依赖项?
How to specify external system dependencies to a Python package?
在编写 Python 包时,我知道如何在 setup.py
文件中指定其他必需的 Python 包,这要归功于 setuptools.setup
中的字段 install_requires
].
但是,我不知道如何指定 外部系统依赖项 不是 Python 包,即 git
或 cmake
(示例)我的包裹可以通过 subprocess.call
或 subprocess.Popen
?
调用
我是否必须手动检查 setup.py
文件中命令的可用性,或者是否有指定系统要求的奇特方法?
编辑: 我只想检查外部工具是否可用,如果不可用,请邀请用户(自己)安装它们。我不想在安装包时管理外部工具的安装。
贡献总结:好像setuptools
不支持这个,在运行时做检查会更安全(c.f .评论和答案)。
我的建议是检查那些 外部依赖项 不在 install-time 而在 run-time。在每个 运行 的开头,或者可能在第一个 运行.
您确实可以将此添加到您的 setup.py
,但 setup.py
并不总是在 install-time 执行:例如,如果您的项目打包为 wheel 那么它甚至根本不包含 setup.py
文件。即使您没有将您的项目作为轮子分发,如果我没记错的话,pip 也倾向于在本地构建一个轮子并将其重新用于后续安装。
因此,尽管可以在安装时将此类检查作为安装脚本的一部分进行(前提是您可以保证 setup.py
的存在和执行),但我会说 run-time是一个更安全的选择。
在编写 Python 包时,我知道如何在 setup.py
文件中指定其他必需的 Python 包,这要归功于 setuptools.setup
中的字段 install_requires
].
但是,我不知道如何指定 外部系统依赖项 不是 Python 包,即 git
或 cmake
(示例)我的包裹可以通过 subprocess.call
或 subprocess.Popen
?
我是否必须手动检查 setup.py
文件中命令的可用性,或者是否有指定系统要求的奇特方法?
编辑: 我只想检查外部工具是否可用,如果不可用,请邀请用户(自己)安装它们。我不想在安装包时管理外部工具的安装。
贡献总结:好像setuptools
不支持这个,在运行时做检查会更安全(c.f .评论和答案)。
我的建议是检查那些 外部依赖项 不在 install-time 而在 run-time。在每个 运行 的开头,或者可能在第一个 运行.
您确实可以将此添加到您的 setup.py
,但 setup.py
并不总是在 install-time 执行:例如,如果您的项目打包为 wheel 那么它甚至根本不包含 setup.py
文件。即使您没有将您的项目作为轮子分发,如果我没记错的话,pip 也倾向于在本地构建一个轮子并将其重新用于后续安装。
因此,尽管可以在安装时将此类检查作为安装脚本的一部分进行(前提是您可以保证 setup.py
的存在和执行),但我会说 run-time是一个更安全的选择。