You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

非Python包项目中用poetry-dynamic-version实现幂等构建的方法

解决poetry-dynamic-versioning修改追踪文件导致的幂等性问题

针对你遇到的问题,有几种可行的解决思路,既能保留动态版本生成能力,又能避免修改被Git追踪的pyproject.toml:

1. 使用--dry-run获取版本,不修改文件

不需要执行poetry dynamic-versioning改动pyproject.toml,直接通过dry-run模式获取计算后的版本,全程不修改文件,从根源避免版本循环问题。

修改脚本中的相关代码:

# 直接获取动态版本,不修改pyproject.toml
MODEL_VERSION=$(poetry dynamic-versioning --dry-run --short)
export MODEL_VERSION

这样MODEL_VERSION会得到基于Git标签和提交的正确版本,同时pyproject.toml保持原样,不会触发Git状态变化。

2. 仅依赖构建后端动态生成版本,跳过主动修改文件

你的pyproject.toml已经配置了poetry_dynamic_versioning.backend作为构建后端,这个后端在执行poetry build时会自动计算并注入版本,不需要提前修改pyproject.toml。

可以完全移除脚本中poetry dynamic-versioning步骤,改为直接从构建后端获取版本:

# 从构建后端获取动态版本
MODEL_VERSION=$(poetry run python -c "from poetry_dynamic_versioning import get_version; print(get_version())")
export MODEL_VERSION

这种方式下,pyproject.toml里的version字段可以设为占位值(比如0.0.0-dev),构建时会被动态替换,全程不会修改文件。

3. 临时修改文件后恢复(适合必须修改文件的场景)

如果你的流程必须依赖pyproject.toml中的版本值,可以在脚本中先备份原始文件,完成操作后再恢复:

# 备份原始pyproject.toml
cp pyproject.toml pyproject.toml.bak

# 更新版本并获取值
poetry dynamic-versioning
MODEL_VERSION=$(poetry version --short --ansi)
export MODEL_VERSION

# 执行需要版本的操作(打包、生成资产等)
# ...

# 恢复原始文件,避免Git追踪变化
mv pyproject.toml.bak pyproject.toml

这种方式确保构建结束后pyproject.toml回到初始状态,不会因为提交修改而影响后续版本计算。

额外配置优化

建议把pyproject.toml中的version字段改为占位值,避免混淆:

[tool.poetry]
name = "warpspeed-multiclass-model"
version = "0.0.0-dev"  # 占位值,构建时会被动态替换

内容的提问来源于stack exchange,提问作者David Waterworth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 04:53:29