如何为sigfig包的用户与贡献者指定不同Python版本?
解决Poetry构建包时Python版本声明错误的问题
问题背景
使用poetry run python -m build构建sigfig包时,生成的PKG-INFO元数据中Python版本要求为>=3.11,但实际包支持低至Python 3.6的版本,3.11仅为开发环境的要求,并非用户核心依赖。此前尝试的两种配置方式均失败:
- 在
[tool.poetry]节添加requires-python = ">=3.6",构建时提示配置无效 - 在
[tool.poetry.dependencies]设置python = "^3.6",同时在[tool.poetry.group.dev.dependencies]设置python = "^3.11",执行poetry lock时出现依赖兼容性错误
正确解决方案
1. 正确声明核心Python版本依赖
Poetry要求全局Python版本约束必须放在[tool.poetry.dependencies]的python字段下,这一配置会同步到包的发布元数据(PKG-INFO)中,让pip正确识别包支持的Python版本范围。
在pyproject.toml中添加如下配置:
[tool.poetry.dependencies] python = ">=3.6,<4.0" # 其他核心业务依赖...
2. 单独管理开发环境的Python版本要求
禁止在开发依赖组中重复定义python约束(Poetry不允许重复声明全局依赖约束),开发环境的Python 3.11要求可以通过以下方式实现:
- 本地开发时,执行
poetry env use 3.11强制使用指定版本的Python,该设置仅作用于本地开发环境,不会影响包的发布元数据 - 在项目文档(如README.md)中明确说明开发环境需要Python 3.11,引导贡献者使用对应版本
- 若需自动化检查开发环境版本,可添加
pre-commit钩子或自定义脚本验证Python版本
完整配置示例片段
[tool.poetry] name = "sigfig" version = "1.0.0" description = "Your package description here" authors = ["Your Name <your.email@example.com>"] [tool.poetry.dependencies] python = ">=3.6,<4.0" # 添加你的核心依赖,比如: # numpy = "^1.19" [tool.poetry.group.dev.dependencies] # 添加开发依赖,无需声明python约束 pytest = "^7.4" black = "^23.7" flake8 = "^6.0"
验证效果
执行poetry run python -m build构建包后,查看生成的dist/sigfig-x.y.z.tar.gz中的PKG-INFO文件,Requires-Python字段应显示为>=3.6,<4.0,此时pip会正确识别包支持Python 3.6及以上版本。
内容的提问来源于stack exchange,提问作者HyperActive
相关产品推荐
相关产品推荐

