【发布时间】:2023-12-11 17:53:01
【问题描述】:
在编写 Python 包时,我知道如何在 setup.py 文件中指定其他所需的 Python 包,这要归功于 setuptools.setup 中的字段 install_requires。
但是,我不知道如何指定不是 Python 包的外部系统依赖项,即我的包可以通过 @ 调用的命令,例如 git 或 cmake(示例) 987654328@或subprocess.Popen?
我是否必须手动检查我的setup.py 文件中的命令的可用性,或者是否有一种奇特的方式来指定系统要求?
编辑:我只想检查外部工具是否可用,如果不可用,请邀请用户(由他们自己)安装它们。我不想在安装包时管理外部工具的安装。
贡献摘要:似乎setuptools 对此不支持,在运行时进行检查会更安全(参见 cmets 和答案)。
【问题讨论】:
-
据我所知,setuptools 不支持此功能(并且很难通用),您必须手动指定此类依赖项;参见例如*.com/a/37481508/1968
-
这不是 setuptools 擅长的。对于这些类型的事情,您应该将代码打包成 Linux 发行版的格式(apt/
.deb、_yum_/.rpm、_pacman 等)。 -
感谢您的回答。实际上,我只想检查系统上是否有这些命令(例如 git 或 cmake),如果没有,则打印一条消息,邀请用户安装它们。我不想完全管理外部工具的安装。
-
我的建议是检查那些不在install-time 而是在run-time 的。在每次运行开始时,或者在第一次运行时。 -- 确实可以将它添加到
setup.py,但setup.py并不总是在安装时 执行:例如,如果您的项目被打包为wheel 那么它甚至根本不包含setup.py文件。即使您不将项目分发为 wheel,如果我没记错的话,pip 倾向于在本地构建一个 wheel 以用于以下内容安装。 -- 所以我会说 run-time 更安全。
标签: python python-3.x setuptools setup.py python-packaging