跳过正文
Background Image
  1. Posts/

关于 Python pip install 与版本管理

·718 字·2 分钟· ·
沈显鹏
作者
沈显鹏
目录

背景
#

如果你计划将 Python 项目发布到 PyPI,就需要了解 PyPI 与 pip 的版本安装规则。
我做了一些关于 pip install 的测试,来观察不同版本号和 --upgrade 参数下的安装行为。

假设我的项目叫 demo-pip

  • Beta 版本号示例:1.1.0.xxxx
  • 正式版本号示例:1.1.0

目标是确认在不同情况下是否能成功升级。


总结
#

  1. 安装 PyPI 上的指定版本(无论是否加 --upgrade)都会成功。
  2. 当 PyPI 上的版本高于本地版本时,只有加 --upgrade 才会成功升级;不加则失败。
  3. 当 PyPI 上的版本低于本地版本时,无论是否加 --upgrade,都会失败。
  4. 使用 1.1.0.xxxx 作为 beta 版本号在 pip 中是合法的,但如果 beta 版本号大于正式版本(例如 1.1.0.1000),在发布正式版本 1.1.0 后,--upgrade 将无法降级安装。
    • 方案 A:正式版本从 1.1.0.1000 开始,beta 版本从 1.1.0.0001 递增。
    • 方案 B(推荐):遵循 PEP 440 官方版本规范,beta 版本命名为 1.1b1, 1.1b2 …(测试结果正常工作)。
  5. 按 PEP 440 命名的 beta 版本(如 1.0b1)被视为小于正式版本,因此升级逻辑正常。

测试案例
#

No.测试步骤结果结论
1安装本地 1.0.5 → PyPI 最新是 1.0.4pip install --upgrade已是最新,无法降级低版本无法覆盖高版本
2安装本地 1.0.3pip install --upgrade(PyPI: 1.0.4升级成功高版本可覆盖低版本(需 --upgrade
3安装本地 beta 1.0.3.1000pip install / --upgrade--upgrade 不升级,有则升级大版本比较逻辑生效
4安装本地 beta 1.0.4.1000pip install 1.0.4降级失败(版本比较更大)beta 高于正式版时降级失败
5安装本地 beta 1.0b1pip install --upgrade(PyPI: 1.0.4升级成功PEP 440 命名可正常比较版本

建议
#

  • 优先遵循 PEP 440:这样可以保证 pip 对 beta、rc、final 等版本的比较符合预期。
  • 在 CI/CD 中明确使用 --upgrade 逻辑,避免不必要的安装失败。
  • 对 beta 与正式版本的发布顺序做好规划,避免版本号反转导致的降级问题。

相关文章

最受欢迎的 Python 自动化测试框架推荐
·749 字·2 分钟
本文整理了当前最受欢迎的 Python 自动化测试框架,包括 Robot Framework、RedwoodHQ、Jasmine 和 Pytest 的介绍和比较。
使用 REST API 更新 Jira Server 账号头像
·215 字·1 分钟
介绍如何通过 Jira REST API 更新 Jira Server 账号的头像,并提供 Python 和 Postman 示例。
通过 generic-webhook-trigger 插件实时获取 Bitbucket Repository Events
·716 字·2 分钟
本文介绍如何使用 Jenkins 的 generic-webhook-trigger 插件来实时获取 Bitbucket 仓库的事件信息,如 Pull Request ID 等。
这也能用Jenkins?快速实现一个定期批量登录远程虚拟机并支持添加新的主机名称的Job
·910 字·2 分钟
本文介绍了如何使用 Jenkins 实现定期批量登录远程虚拟机,并支持用户添加新的主机名称,提供了完整的实现代码和步骤。
解决 Jenkins Artifactory Plugin 仅在 AIX 上传制品到 https 协议的 Artifactory 失败的问题
·1995 字·4 分钟
本文介绍了在 AIX 上使用 Jenkins Artifactory 插件上传制品到 https 协议的 Artifactory 失败的问题及其解决方法,包括设置环境变量和调整 Java 系统属性。
如何确保在提交 Jenkins Pipeline 前没有语法错误
·962 字·2 分钟
本文介绍了两种方法来确保在提交 Jenkins Pipeline 前没有语法错误:使用 REST API 进行语法校验和使用 VSCode 插件进行语法检查。