使用setuptools_scm时,如何让pip仅安装最新标记版本?
解决setuptools_scm默认安装Git仓库最新标签版本的问题
方案1:修改setuptools_scm配置,强制返回最新标签版本
在项目配置中调整setuptools_scm的行为,让它忽略未标记提交,始终返回仓库里最新的标签版本。
如果用pyproject.toml,添加以下配置:
[tool.setuptools_scm] fallback_version = "0.0.0" local_scheme = "no-local-version" # 禁用自动推测下一个开发版本 guess_next_version = false # 自定义规则:仅返回最近的标签版本 version_scheme = """ lambda version: version.tag if version.tag else version.fallback_version """
如果用setup.py,修改use_scm_version参数:
from setuptools import setup def latest_tag_version(version): return version.tag if version.tag else version.fallback_version setup( use_scm_version={ "fallback_version": "0.0.0", "local_scheme": "no-local-version", "guess_next_version": False, "version_scheme": latest_tag_version, }, # 其他项目配置... )
配置完成后,不管当前仓库HEAD是不是标记提交,setuptools_scm都会返回最近的标签版本。这样执行pip install git+<仓库URL>时会安装对应标签版本,而非自动生成的开发版;同时pip list --outdated和pip install --upgrade只会在有新标签时提示更新,不会因为未标记提交触发。
方案2:通过命令自动获取最新标签再安装
如果不想修改项目配置,可以用命令行先获取仓库的最新标签,再基于标签安装:
Windows PowerShell命令:
$latest_tag = git ls-remote --tags --sort="v:refname" <你的仓库URL> | Select-Object -Last 1 | ForEach-Object { $_.Split('/')[-1] } python -m pip install git+<你的仓库URL>@$latest_tag
Linux/macOS Bash命令:
latest_tag=$(git ls-remote --tags --sort="v:refname" <你的仓库URL> | tail -n1 | cut -d'/' -f3) pip install git+<你的仓库URL>@$latest_tag
这个方法会自动拉取仓库所有标签并排序,取最新的一个作为安装目标,无需手动输入标签名。
内容的提问来源于stack exchange,提问作者mira
相关产品推荐
相关产品推荐

