Python 包装。多次发布后指定python版本要求

Python packaging. Specify python version requirements after multiple releases

我在 pypi 上发布了一个包,版本为 3.0.0。

setup.py 从未提及 python_requires 指令。

在 2.5.0 版中有一个更改使包与 python 2 不兼容,直到现在才被注意到。

自 2.5.0 以来,在 pypi 上发布了大量的软件包。

现在,如果我想使用 python2 安装程序包 - pip 将安装最新版本 3.0.0,但无法正常工作。

我需要 pip 来安装版本 2.4.0 - 它没有兼容性问题。但我究竟怎样才能做到这一点? (事先不知道 pip install package==2.4.0 - 类似于使用 pip 的回溯机制)

如果我在版本 3.1.0 中指定指令 python_requires=">=3.6" pip 将回溯到版本 3.0.0 安装包,这将不起作用。

我能想到:

  1. cx_Oracle way。如果最低版本与安装要求不匹配并指定如何安装正确版本,则在 setup.py 中引发异常。

  2. 创建 2 个新版本。一个本质上是 2.4.0 版本为 python_requires=">=2.7,<3.6" 的 3.1.0,另一个是 3.0.0 版本为 python_requires=">=3.6"

    的 3.1.1

有没有更好的方法?

PyPI 上有一个相对较新的功能:您可以“提取”与 Python2 不兼容但未在元数据中正确指定的版本。

被抽出的版本是安装程序总是忽略的版本,除非它是唯一与版本说明符匹配的版本(使用 =====)。

请参阅 PEP 的 PEP 592 -- Adding "Yank" Support to the Simple API for more information. In fact, what you've described is the main scenario described in the motivation 部分。