如何定义pip/setuptools私有依赖实现SSH优先HTTPS回退
解决方案
pip目前没有原生支持SSH拉取失败自动回退HTTPS的依赖声明语法,你可以通过以下两种方案实现你要的效果:
推荐方案:统一配置HTTPS依赖,本地通过git规则自动替换为SSH
该方案不需要修改项目原有配置,仅需个人本地做一次全局配置即可:
- 首先将项目
setup.cfg里的依赖统一写为生产环境使用的HTTPS格式:
install_requires = photutils numpy mydep @ git+https://github.com/mydep.git#egg=mydep
- 本地执行一次git全局配置命令:
git config --global url."ssh://git@github.com/".insteadOf "https://github.com/" - 配置生效后,git在处理所有
https://github.com/开头的仓库地址时,会自动替换为SSH协议地址,不管是pip安装依赖、直接git clone还是其他git操作都会生效,完全不影响你的日常使用习惯。其他未配置该规则的项目成员、生产环境,依旧会默认走HTTPS协议拉取依赖。 - 如需取消该配置,执行命令:
git config --global --unset url."ssh://git@github.com/".insteadOf
备选方案:动态依赖声明
如果不想修改本地git配置,可以将静态的setup.cfg改为动态的setup.py,通过环境变量切换依赖地址:
from setuptools import setup import os use_ssh = os.getenv("USE_SSH", "0") == "1" mydep_url = "git+ssh://git@github.com/mydep.git#egg=mydep" if use_ssh else "git+https://github.com/mydep.git#egg=mydep" setup( # 其他项目配置(名称、版本、描述等)和原有配置保持一致即可 install_requires = [ "photutils", "numpy", f"mydep @ {mydep_url}" ] )
你自己本地安装时执行USE_SSH=1 pip install .就会走SSH协议拉取,其他成员默认执行pip install .就走HTTPS协议。
内容的提问来源于stack exchange,提问作者Autiwa
相关产品推荐
相关产品推荐

