如何在Poetry 1.7.1中不修改pyproject.toml添加时间戳版本后缀发布包
解决Poetry动态添加时间戳版本后缀并发布的问题
针对你使用Poetry 1.7.1需要动态给版本加时间戳、不修改pyproject.toml且每次发布唯一包的需求,以下是可行方案:
方案1:用Poetry 1.7+新增的--version参数直接指定版本
Poetry 1.7及以上版本支持在构建/发布时通过命令行直接指定版本,完全不用动pyproject.toml:
- 先生成带时间戳的版本号(以Linux/macOS为例,Windows可调整时间戳生成命令):
TIMESTAMP=$(date +%Y%m%d%H%M%S) TARGET_VERSION="1.2.3-$TIMESTAMP" - 直接指定版本构建:
poetry build --version "$TARGET_VERSION" - 发布构建好的包(如果不想分开执行,也可以一步到位):
分开执行的话,构建完成后直接执行# 一步完成构建+发布 poetry publish --build --version "$TARGET_VERSION"poetry publish即可,因为构建出的包文件名已经包含指定的版本号,Poetry能正确识别。
方案2:通过环境变量临时覆盖版本
如果需要更灵活的方式,也可以用环境变量临时覆盖pyproject.toml中的版本:
TIMESTAMP=$(date +%Y%m%d%H%M%S) export POETRY_VERSION_OVERRIDE="1.2.3-$TIMESTAMP" poetry build poetry publish
默认情况下Poetry允许通过这个环境变量覆盖版本,无需额外配置。
关于你之前的poetry version方法失效的原因
poetry version $version会直接修改pyproject.toml文件,而且如果修改后没有清理Poetry的缓存,或者没有重新生成锁文件,构建时可能还是用旧版本的缓存包,导致发布时检测不到新生成的带时间戳版本包。上面的两种方法都是在构建阶段动态注入版本,完全不修改原文件,也不会触发缓存问题。
验证
发布完成后去JFrog仓库查看,就能看到版本号为1.2.3-<当前时间戳>的包,每次构建的时间戳唯一,确保每个包都是独立的。
内容的提问来源于stack exchange,提问作者JV44
相关产品推荐
相关产品推荐

