停止支持旧版 Python¶
通过标准 核心元数据规范 1.2 规范中的 “Requires-Python” 属性,可以停止支持旧版 Python。
元数据 1.2+ 安装程序,例如 Pip,将遵守此规范,通过匹配当前 Python 运行时并将其与包元数据中所需的版本进行比较。如果它们不匹配,它将尝试安装支持该 Python 运行时的最后一个包分发。
通过修改包元数据中的 Requires-Python 属性,可以使用此机制停止支持旧版 Python。
要求¶
此工作流要求安装包的用户使用 Pip [1] 或其他支持元数据 1.2 规范的安装程序。
处理通用 Wheel¶
传统上,提供与 Python 2 和 Python 3 语义兼容的 Python 代码的 Setuptools 项目,会生成名称中带有 py2.py3 标签的 wheel。在停止支持 Python 2 时,重要的是不要忘记将此标签更改为仅 py3。它通常在 setup.cfg 文件中的 [bdist_wheel] 部分中配置,通过设置 universal = 1。
如果您使用此方法,请删除此选项或部分,或将 universal 显式设置为 0
# setup.cfg
[bdist_wheel]
universal = 0 # Make the generated wheels have "py3" tag
提示
关于 已弃用 的直接 setup.py 调用,在命令行上传递 --universal 标志可能会覆盖此设置。
定义所需的 Python 版本¶
1. 安装 twine¶
确保您已安装最新版本的 twine。步骤
python3 -m pip install --upgrade twine
py -m pip install --upgrade twine
2. 为支持的 Python 分发指定版本范围¶
在项目的 pyproject.toml 中设置版本范围,声明支持哪些 Python 分发。requires-python 配置字段对应于 Requires-Python 核心元数据字段
[build-system]
...
[project]
requires-python = ">= 3.8" # At least Python 3.8
您可以指定版本范围和排除规则(符合 版本说明符 规范),例如至少 Python 3.9。或者,至少 Python 3.7 及更高版本,跳过 3.7.0 和 3.7.1 点版本
requires-python = ">= 3.9"
requires-python = ">= 3.7, != 3.7.0, != 3.7.1"
如果使用 Setuptools 构建后端,请查阅 依赖管理 文档以获取更多选项。
注意
避免在版本范围中添加上限,例如 ">= 3.8, < 3.10"。这样做可能会导致不同的错误和版本冲突。有关更多信息,请参阅 讨论。
3. 发布前验证元数据¶
在 Python 源包(您下载的 zip 或 tar-gz 文件)中,有一个名为 PKG-INFO 的文本文件。
此文件由 构建后端 在生成源包时生成。该文件包含一组键和值,键列表是 PyPA 标准元数据格式的一部分。
您可以像这样查看生成文件的内容
tar xfO dist/my-package-1.0.0.tar.gz my-package-1.0.0/PKG-INFO
在发布包之前,验证以下内容是否已到位
如果您已正确升级,则
Metadata-Version值应为 1.2 或更高版本。Requires-Python字段已设置并与配置文件中的规范匹配。
4. 发布包¶
按照 将您的项目上传到 PyPI 中建议的步骤进行。
停止支持某个 Python 版本¶
原则上,至少应该尽可能长时间地保留对 Python 版本的元数据支持,因为一旦停止支持,仍然依赖该版本的人将被迫降级。但是,如果支持特定版本成为新功能或其他问题的障碍,则应修改元数据 Requires-Python。当然,这还取决于项目是否需要稳定并广泛覆盖更广泛的用户。
每次版本兼容性更改都应有自己的发布。