如何配置requirements.txt兼容SSH/HTTPS安装私有Git仓库依赖
解决方案
pip 没有提供单条依赖声明就能自动适配 SSH/HTTPS 两种 GitHub 连接协议的原生语法,但可以通过以下两种成熟方案实现兼容,不需要强制所有安装者使用同一种连接方式:
方案1:基于 Git 原生地址替换规则实现(最推荐,侵入性最低)
你只需要在requirements.txt里统一写任意一种格式的依赖声明即可,比如统一写 HTTPS 格式:git+https://github.com/<repo-name>@<version>#egg=<你的包名>习惯使用 SSH 连接 GitHub 的安装者,只需要在本地执行一次 Git 全局配置:
git config --global url."git@github.com:".insteadOf "https://github.com/"配置完成后,Git 拉取所有 GitHub 仓库时会自动把 HTTPS 地址替换为 SSH 地址,pip 安装过程完全无感知,不需要修改
requirements.txt的内容。
如果你选择在requirements.txt里统一写 SSH 格式的依赖,习惯用 HTTPS 的安装者也可以配置反向替换规则:git config --global url."https://github.com/".insteadOf "git@github.com:"这个方案是目前业内使用最广泛的做法,不需要在依赖文件里写重复内容,也不会给安装者增加多余负担。
方案2:通过环境变量动态适配协议
你可以在requirements.txt里用 pip 支持的环境变量占位符声明依赖:git+${GIT_PREFIX}github.com/<repo-name>@<version>#egg=<你的包名>安装时用户只需要根据自己本地的 GitHub 连接方式传入对应环境变量即可:
- 用 HTTPS 连接的用户执行:
GIT_PREFIX=https:// pip install -r requirements.txt - 用 SSH 连接的用户执行:
GIT_PREFIX=ssh://git@ pip install -r requirements.txt
用户也可以把对应的环境变量写到本地 Shell 配置文件里实现全局生效,不需要每次安装都传参。
- 用 HTTPS 连接的用户执行:
注意:不要在
requirements.txt里同时写两种协议的同个依赖条目,否则会造成 pip 重复解析,极易引发版本冲突问题。
内容的提问来源于stack exchange,提问作者pawlick2
相关产品推荐
相关产品推荐

