软件包版本格式转换器
粘贴一个或多个版本字符串(每行一个),查看哪些符合 SemVer、PEP 440、两者或都不符合,以及为什么某生态系统中看似正常的版本可能在另一个生态系统被拒绝或静默表示不同含义。
在您的浏览器中本地处理。文件绝不会被上传。
使用方法 工具
- 粘贴一个或多个版本字符串,每行一个;内容不会离开浏览器。
- 选择“检查版本”。
- 查看每个标记值不符合哪种语法,或存在何种细微语义差异,以及原因。
- 仅在提供时使用建议改写;有些转换只是近似,工具会解释而不静默应用。
假设条件
- 识别两种语法的常见形式:SemVer 2.0.0(`MAJOR.MINOR.PATCH[-prerelease][+build]`)和 PEP 440(`[N!]N(.N)*[{a|b|rc}N][.postN][.devN][+local]`)。不支持 Debian epoch/revision 后缀、Maven qualifier 等特殊或供应商专用版本方案。
- 不实现版本比较/排序语义,只检查语法是否正确、是否有效以及安全可逆的转换。
- 只在明确无歧义且无损时提供改写,例如移除 git 标签 `v` 前缀,或为两段版本补上第三段。PEP 440 的 dev/post 后缀在 SemVer 中没有精确等价项,因此不会自动改写,只会说明近似对应方式。
来源与参考数据
方法说明
每行分别按两种语法检查,使用根据规范编写的正则表达式(SemVer 2.0.0 官方语法正则,以及覆盖 PEP 440 epoch/release/pre/post/dev/local 段的模式)。之后检查两生态系统有文档记录的差异:SemVer 要求在预发布标识符前使用连字符而 PEP 440 不要求;PEP 440 的 dev/post 版本在 SemVer 中没有等价形式;构建元数据语义不同(SemVer 排序时忽略,PEP 440 本地版本不忽略);git 标签 `v` 前缀不属于任一语法;严格 SemVer 不接受前导零;PEP 440 接受而 SemVer 不接受两段版本。
计算示例
缺少 SemVer 必需连字符的 Python 风格预发布版本
输入项: 1.0.0a1
结果: 符合 PEP 440(alpha 1),但严格 SemVer 要求任何预发布标识符前带连字符,因此会拒绝。标记为错误,并建议 SemVer 格式 `1.0.0-a1`。
构建元数据与 PEP 440 本地版本
输入项: 1.2.3+build1
结果: 文本在两种语法下都有效,但 SemVer 排序必须忽略 `+build1`(因此 `1.2.3+build1` == `1.2.3+build2`),而 PEP 440 对应的本地版本段会影响排序。标记为语义差异警告;歧义来自规范而非字符串,因此不改写。
PEP 440 开发版本后缀
输入项: 1.0.0.dev0
结果: 符合 PEP 440(早于 1.0.0 的开发版本),但 SemVer 没有直接等价概念。标记为错误并说明 `1.0.0-dev.0` 有时作为近似形式使用,但排序规则不同;不自动改写。
实用指南
- 软件包若需同时以 npm 风格 SemVer 和 PyPI 风格 PEP 440 发布,请选满足较严格语法的方案:普通 `MAJOR.MINOR.PATCH` 加连字符预发布(例如 `1.2.3-rc1`)在两者中均有效且含义相同。
- 重要判断不要依赖构建元数据或 PEP 440 本地版本排序;两个生态系统对其是否影响优先级的规定不同,可将该部分视为仅供参考。
- 将版本传给解析器或比较库前,先移除 git 标签 `v` 前缀;移除无损,且两个语法都不要求该前缀。
常见错误
- 认为 `1.0.0a1` 和 `1.0.0-a1` 对所有工具含义相同;前者仅符合 PEP 440,后者两者均有效。严格 SemVer 解析器会直接拒绝前者,而非宽松读取。
- 认为 PEP 440 dev/post 后缀存在精确 SemVer 转换;并不存在,任何映射都只是排序行为不同的近似。
常见问题
为什么 `1.0.0a1` 标记为错误而不只是警告?
这不只是风格不常见:严格 SemVer 解析器会完全无法解析,类似 JSON 解析器遇到尾随逗号时失败。这是硬性不兼容,而非风格偏好。
为什么不自动将 `1.0.0.dev0` 改写为 SemVer 等价形式?
没有保证等价的形式。PEP 440 dev/post 版本表示早于或晚于某版本的方式,与 SemVer 预发布/构建字段不同;任何 SemVer 写法都是排序行为不同的近似。本工具只在确实无损时自动改写。
`1.2.3+build1` 真的有问题吗?
文本本身没有问题,在两种语法下都有效。风险在于构建/本地版本后缀影响版本比较的方式,两种生态系统工具处理不同。
PEP 440 `.dev` 版本能精确转换为 SemVer 吗?
无法保证精确转换。PEP 440 开发版本的排序语义并非所有情况下都能由 SemVer 预发布标识符复现。`1.0.0-dev.0` 可能是近似而非等价版本。本工具检查已识别的形式和可移植性提示,不运行包管理器解析器或比较版本。
上次审核: 2026-09-25
这是按语法形态检查的工具,不是完整包管理器版本解析器:只识别 SemVer 2.0.0 与 PEP 440 常见形式,不支持 Debian revision、Maven qualifier 等专用方案,也不实现任一格式的比较/排序逻辑。
主题和工具偏好设置,以及已保存和最近使用的列表仅存储在此浏览器中。