如何在pyproject.toml中为Git仓库依赖指定>=版本?
先说结论:pip本身**不支持直接对Git仓库依赖使用语义化版本范围(比如>=1.2)**来自动匹配符合条件的标签版本。因为pip处理Git依赖时,要么指定具体的commit、tag、分支,要么直接拉取默认分支,不会主动扫描仓库的所有标签并筛选符合语义化版本规则的选项。
可行的替代方案
用
pip-tools配合需求文件实现
先写一个requirements.in文件,内容如下:git+https://github.com/your/repo.git@>=1.2#egg=your-package然后用
pip-compile工具处理这个文件,它会自动扫描仓库的所有标签,筛选出符合>=1.2规则的最高版本,生成固定到具体tag的requirements.txt。之后安装时直接用pip install -r requirements.txt即可。把仓库版本发布到PyPI(推荐)
如果能把Git仓库的版本发布到PyPI(包括私有PyPI源),就可以直接在pyproject.toml里用标准的语义化版本范围配置,完全符合pip原生工作流:[project] dependencies = [ "your-package>=1.2", ]自定义脚本自动筛选标签
自己写个简单的Python脚本,调用git ls-remote --tags命令获取仓库所有标签,用packaging.version库解析并筛选符合版本范围的最高版本,再自动更新pyproject.toml里的Git依赖到对应的tag。
注意事项
直接在pyproject.toml里写git+https://github.com/your/repo.git@>=1.2#egg=your-package是无效的,pip会把>=1.2当作分支或tag名称,而非版本范围。如果用poetry这类第三方工具,对Git依赖的版本范围支持会更友好,但原生pip只能靠上面的替代方案实现需求。
内容的提问来源于stack exchange,提问作者hopeless-programmer

