如何为同一版本Python包发布多Python版本兼容的.whl文件
同一Python包版本下支持多个不同平台/版本的.whl文件吗?
问题背景
- 自研Python包目前仅针对Python 3.7编译,希望扩展支持所有≥3.7的Python版本
- 该包是PyPI库的分支,项目依赖其特定版本,已在
install_requires中指定版本号 - 用Python 3.12编译得到
package-1.5.2-cp312-cp312-win_amd64.whl,发布到Azure DevOps PyPI源时,提示「模块版本已存在」 - 观察到PyPI上存在同一版本对应多个.whl的情况,疑问是否Azure DevOps也支持该特性
解答
完全可以将多个适配不同Python版本/平台的.whl文件归到同一个包版本下,PyPI和Azure DevOps Artifacts的PyPI源都支持这个特性,问题出在发布方式上,以下是具体解决方法:
1. 使用twine上传的正确姿势
如果你用twine工具上传包,需要:
- 把同版本的所有
.whl文件(包括已上传的Python 3.7版本和新编译的3.12版本)一起上传,命令示例:twine upload --repository-url <你的Azure DevOps源URL> package-1.5.2-*.whl - 如果已经上传过部分版本的
.whl,不想重新上传已存在的文件,可以添加--skip-existing参数跳过已上传的文件:twine upload --repository-url <你的Azure DevOps源URL> --skip-existing package-1.5.2-cp312-cp312-win_amd64.whl
2. Azure DevOps Pipeline发布的配置调整
如果用Azure DevOps流水线发布:
- 在「Python包发布」任务中,选择「上传所有匹配的包文件」,并填写匹配规则(比如
package-1.5.2-*.whl) - 开启「跳过已存在的包」选项,避免因已有同版本的其他
.whl而触发版本冲突报错
3. 检查whl文件名规范
确保你的.whl文件名符合PEP 425规范(比如package-1.5.2-cp312-cp312-win_amd64.whl),这样pip等包管理工具才能正确识别不同环境的适配包,避免出现识别异常。
内容的提问来源于stack exchange,提问作者Brice_
相关产品推荐
相关产品推荐

