
在 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 中):
睿拓智能网站系统-网上商城1.0免费版软件大小:5M运行环境:asp+access本版本是永州睿拓信息专为电子商务入门级用户开发的网上电子商城系统,拥有产品发布,新闻发布,在线下单等全部功能,并且正式商用用户可在线提供多个模板更换,可实现一般网店交易所有功能,是中小企业和个人开展个人独立电子商务商城最佳的选择,以下为详细功能介绍:1.最新产品-提供最新产品发布管理修改,和最新产品订单查看2.推荐产
# 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)不仅可行,更是提升项目可维护性与用户信任度的关键策略——它保障了现有用户持续获得安全修复与小幅增强,同时为新特性提供充分的灰度验证周期。









