可以同时发布开发版和稳定版:版本管理最佳实践


在 python 包开发中,你完全可以在推进 `1.0.0.dev1` 等预发布版本的同时,继续发布 `0.8.5` 或 `0.9.0` 等稳定版本;pip 及主流工具(如 poetry、pipenv)默认忽略预发布版本,优先安装最新稳定版。

这是语义化版本(SemVer)与现代 Python 工具链协同工作的标准实践。核心原理在于:预发布版本(如 1.0.0.dev1、1.0.0a1、1.0.0rc2)在版本比较中被明确标记为“非稳定”,因此不会干扰稳定分支的迭代节奏

例如,假设你的 PyPI 仓库中存在以下版本:

  • 0.8.4(stable)
  • 0.8.5(stable,刚发布)
  • 0.9.0(stable,计划中)
  • 1.0.0.dev1(pre-release,位于 main 或 dev 分支)

当用户执行 pip install mypackage 时,pip 默认启用 --pre 标志的反向行为——即 不包含 --pre 时,自动排除所有含 dev/a/b/rc 等标识的版本。因此,它将解析出最高稳定版本 0.9.0(若已发布),而非 1.0.0.dev1。

✅ 正确操作示例(setup.py 或 pyproject.toml 中):

# pyproject.toml
[project]
name = "mypackage"
version = "0.8.5"  # 发布稳定版时直接更新此处
# 发布 0.8.5(稳定)
twine upload dist/mypackage-0.8.5-py3-none-any.whl

# 同时,1.0.0.dev1 可独立发布(需显式指定 --pre)
twine upload dist/mypackage-1.0.0.dev1-py3-none-any.whl

⚠️ 注意事项:

  • 若需安装开发版,用户必须显式加 --pre:pip install --pre mypackage
  • 使用 Poetry 时,poetry add mypackage 默认不拉取预发布版;如需,需写 poetry add mypackage@^1.0.0-dev
  • 确保 CI/CD 流水线对 dev 版本打标签(如 git tag 1.0.0.dev1)并跳过自动部署到生产环境的步骤
  • 推荐在 README.md 中清晰说明版本策略,例如:“稳定版见 v0.x 分支;1.0.0 开发进展请关注 dev 分支及 1.0.0.dev* 预发布包”

总结:并行维护多个稳定小版本(0.8.x → 0.9.x)与一个长期开发的大版本(1.0.0)不仅可行,更是提升项目可维护性与用户信任度的关键策略——它保障了现有用户持续获得安全修复与小幅增强,同时为新特性提供充分的灰度验证周期。


# python  # git  # 工具  # ai  # win 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化76771 】 【 技术知识130152 】 【 IDC云计算60162 】 【 营销推广131313 】 【 AI优化88182 】 【 百度推广37138 】 【 网站推荐60173 】 【 精选阅读31334


相关推荐: Mac如何使用听写功能_Mac语音输入打字【效率技巧】  Win10如何关闭安全中心所有通知 Win10禁用Windows Defender提醒【设置】  Windows蓝屏错误0x0000002C怎么解决_系统IO异常排查方法  c# 如何深拷贝和浅拷贝  c++获取当前时间戳_c++ time函数使用详解  手机php文件怎么变成mp4_安卓苹果打开php转mp4方法【教程】  Mac怎么安装软件_Mac安装dmg与pkg文件的区别【指南】  Python文件和流处理指南_高效读写大体积数据文件  Win11怎么关闭系统透明度_Windows11个性化颜色透明效果  Windows10如何更改开机密码_Win10登录选项更改密码教程  Mac如何整理桌面文件_Mac使用堆栈功能一键整理  如何使用Golang实现路由分组管理_Golang路由分组与权限控制方法  PHP 中如何在函数内持久化修改引用变量的指向  如何在 ACF 中正确更新嵌套多层 Group 字段内的子字段  MAC怎么使用表情符号面板_MAC Emoji快捷键调用与符号查找【方法】  Windows10系统怎么查看IP地址_Win10网络连接状态详细信息  Linux如何安装JDK11_Linux环境变量配置与Java开发环境搭建【教程】  GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?  Win11如何设置省电模式 Win11开启电池节电功能【优化】  Mac电脑如何恢复出厂设置_Mac抹掉数据并重装系统【安全指南】  Win11怎么设置单手模式_Win11触控键盘布局调整教程【技巧】  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  Windows10系统怎么查看运行时间_Win10 CPU正常运行时间查询  PowerShell怎么创建复杂的XML结构  如何在 Django 中安全修改用户密码而不使会话失效  Linux怎么实现内网穿透_Linux安装Frp客户端与服务端配置【方法】  静态属性修改会影响所有实例吗_php作用域操作符下静态存储【教程】  mac怎么打开终端_MAC终端Terminal使用入门与常用命令【教程】  Win11怎么设置默认图片查看器_Windows11照片应用关联设置  Win11任务栏天气怎么关闭 Win11隐藏天气小组件图标【设置】  Win10如何卸载自带Edge_Win10彻底卸载Edge浏览器教程【攻略】  如何使用Golang捕获测试日志_Golang testing日志记录方法  windows如何修改文件默认打开方式_windows设置程序关联教程  Win11开机Logo怎么换_Win11自定义启动画面工具【高级】  Windows电脑如何截屏?(四种快捷方法)  MAC怎么在照片中添加水印_MAC自带编辑工具文字水印叠加【方法】  Mac如何创建和管理多个桌面空间_Mac高效多任务处理【技巧】  如何在Golang中实现微服务负载均衡_Golang负载均衡策略与实现示例  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  本地php环境出现502错误_nginx或apache502badgateway解决技巧【解答】  TestNG的testng.xml配置文件怎么写  Win11怎么更改鼠标指针方案_Windows11自定义鼠标光标样式与大小  Python类装饰器使用_元编程解析【教程】  Golang如何遍历目录文件_Golang filepath.Walk目录遍历操作方法  Linux如何安装Golang环境_Linux下Go语言开发包配置【方法】  php能跑在stm32上吗_php在stm32微控制器上的移植方法【介绍】  c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗  Win11如何开启系统更新 Win11开启系统更新方法【步骤】  c++中的Tag Dispatching是什么_c++利用标签分发优化函数重载【元编程】  如何在 Go 中正确反序列化 XML 多节点数组(解决仅解析首个元素的问题) 

 2025-12-27

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

致胜网络推广营销网


致胜网络推广营销网

致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 915688610

 17370845950

 915688610@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.