前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Python包中控制只允许特定Python版本使用

如何在Python包中控制只允许特定Python版本使用

作者头像
测试开发囤货
发布2023-11-13 14:00:54
3890
发布2023-11-13 14:00:54
举报
文章被收录于专栏:测试开发囤货测试开发囤货

如何在Python包中控制只允许特定Python版本使用

在发布Python包时,有时候我们想要限制只能在某些Python版本中使用,防止用户在不兼容的版本中安装使用。本文将介绍在构建Python包时,如何通过设置来只允许特定Python版本运行。

使用python_requires

Python包的元数据中包含一个python_requires字段,用于指定package的Python版本依赖关系。在setup.py或setup.cfg中设置这个字段可以检查Python版本:

代码语言:javascript
复制
# setup.py

from setuptools import setup

setup(
  name='mypackage',
  python_requires='>=3.6', # 需要Python 3.6或以上
)
代码语言:javascript
复制
# setup.cfg

[options]
python_requires = >=3.6

在用户使用pip安装该package时,会检查Python版本,如果低于指定的版本,将会产生错误并终止安装过程。

所以通过python_requires可以方便地限制只在某些Python版本中使用。例如只需要Python 3.10+:

代码语言:javascript
复制
python_requires='>=3.10'

需要注意的是,只检查版本是不够的,还需要确保代码能在该Python版本下正常运行。所以在设置版本限制时,要提前在所有支持的版本中测试package。

设置classifiers

PyPI页面会显示package的元数据信息,其中就包含一个classifiers字段,它指定了该package的分类信息,包括支持的Python版本。

例如只支持Python 3.10+可以这样设置classifiers:

代码语言:javascript
复制
classifiers=[
  'Programming Language :: Python :: 3',
  'Programming Language :: Python :: 3.10',
  'Programming Language :: Python :: 3.11',
]

我们指定了一个general的Python 3分类,以及具体的3.10和3.11版本。这样PyPI页面就会显示这些信息,说明只兼容这两个版本。

与python_requires不同,classifiers不会主动检查版本,仅起说明作用。但设置准确的classifiers可以让用户一目了然该package的Python兼容性。

classifiers还可以指定包的适用平台、许可证、操作系统等信息,非常全面,可以参考官方classifiers列表。

https://pypi.org/classifiers/

版本范围的环境标记

在requirements中可以使用PEP 440定义的版本规范和环境标记来表示依赖关系。例如:

代码语言:javascript
复制
package1
package2; python_version > "3.6"
这表示package2需要Python 3.6以上。

所以可以用这种方式在requirements中加上版本限制,也是控制兼容性的一种方式。

随着Python版本维护classifiers

随着Python的更新,当添加或移除对某些Python版本的支持时,需要同步更新python_requiresclassifiers的声明。

一般的维护流程是:

  1. 在新版本中测试package,确保兼容
  2. 发布时在setup.py和PyPI元数据中添加该版本的声明 例如Python 3.12发布后,可以更新为:
代码语言:javascript
复制
python_requires='>=3.10,<4.0' 

classifiers=[
  ...,
  'Programming Language :: Python :: 3.12',
]

如果不再支持某旧版本,也需要删除对应classifiers声明。

通过持续维护,可以确保classifiers和python_requires准确反映package兼容的Python版本。这在长期维护一个package时十分必要。

总结

  • python_requires可以限制Python版本
  • classifiers发布元数据表示兼容版本
  • 版本范围的环境标记也可用于指定依赖关系
  • 随着Python版本要持续维护元数据

利用好这些机制,就可以方便地控制package只在特定Python版本下可用,避免用户在不兼容环境中安装使用。同时也方便用户一眼看清package的Python兼容性。对于库的作者和使用者来说,都是很有必要的功能。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-11-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试开发囤货 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何在Python包中控制只允许特定Python版本使用
    • 使用python_requires
      • 设置classifiers
        • 版本范围的环境标记
          • 随着Python版本维护classifiers
            • 总结
            相关产品与服务
            腾讯云服务器利旧
            云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档