我在 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 呢? (没有 pip install package==2.4.0 的先验知识 - 类似于使用 pip 的回溯机制)
如果我指定指令 python_requires=">=3.6"
在版本 3.1.0 中,pip 将回溯到版本 3.0.0 安装包,该安装包将不起作用。
我能想到:
cx_Oracle way 。如果最低版本与安装所需的版本不匹配,则在 setup.py 中引发异常,并指定如何安装正确的版本。
创建 2 个新版本。一,本质上是 2.4.0,版本为 3.1.0,带有
python_requires=">=2.7,<3.6"
3.0.0 版本为 3.1.1,带有python_requires=">=3.6"
有更好的方法吗?
最佳答案
PyPI 上有一个相对较新的功能:您可以“撤回”与 Python 2 不兼容但未在元数据中正确指定的版本。
抽出的版本是安装程序始终忽略的版本,除非它是唯一与版本说明符匹配的版本(使用 ==
或 ===
).
参见PEP 592 -- Adding "Yank" Support to the Simple API了解更多信息。其实你描述的就是motivation中描述的主要场景。 PEP 部分。
关于Python 包装。指定多次发布后的python版本要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68008348/