在 setup.py 中包含最低 pip 版本

JLu*_*ton 7 python pip setup.py

我为我的应用程序创建了一个 setup.py。我在 install_requires 中设置的一些依赖项需要 pip 版本 19.3.1 或更高版本。

有没有办法检查 pip 版本作为 setup.py 的一部分?并在构建之前升级 pip?

sin*_*roc 6

您没有责任在您的项目中针对其他项目打包中的问题构建解决方法。这是一种不好的做法。无论如何,这样做也没有多大意义,因为在许多情况下,该文件在安装期间setup.py不会执行。

您能做的最好的事情就是尝试直接修复这些依赖项项目的错误打包:联系维护人员、提出问题、提出修复建议等。

第二件最好的事情是向用户通报您的项目。在你自己项目的文档中清楚地说明这个问题以及如何防止它(即“安装pip版本19.3.1或更高版本”)。


更新

如果您决定无论如何强制执行签入setup.py,这里有一些可能会有所帮助的技术...

但我仍然建议不要这样做,因为你setup.py实际上并没有错,但问题似乎在于依赖项的打包。

1.

__requires__ = ['pip >= 19.3.1']  # make sure it's before 'import setuptools'
import setuptools

setuptools.setup(
    # ...
)
Run Code Online (Sandbox Code Playgroud)

这会触发异常:

__requires__ = ['pip >= 19.3.1']  # make sure it's before 'import setuptools'
import setuptools

setuptools.setup(
    # ...
)
Run Code Online (Sandbox Code Playgroud)

这种技术的缺点是,当从pip调用时它不会触发(例如:pip install .),因为在这种情况下,该__main__模块不是pipsetup.py的模块。

参考:

2.

import pkg_resources
import setuptools

pkg_resources.require(['pip >= 19.3.1'])

setuptools.setup(
    # ...
)
Run Code Online (Sandbox Code Playgroud)

这会触发pkg_resources.VersionConflict异常。

即使从pip调用,这也应该有效,但是......

这似乎不适用于构建隔离PEP 517pyproject.toml),因为在这种情况下,构建环境中通常根本没有pip 。

参考: