git+https依赖场景下pip install -e .失败但pip install -r成功的问题
问题原因
这是因为pip和setuptools对依赖格式的解析规则完全不同:
pip install -r requirements.txt用的是pip专属的解析逻辑,为了兼容历史用法,它支持直接写git+https://...这类非标准格式的VCS依赖。- 但当你在setup.cfg里用
install_requires = file: requirements.txt时,实际是让setuptools来解析这个文件的内容,而setuptools严格遵循PEP 508依赖规范,它要求所有依赖必须以「包名 @ 依赖源」的格式声明,直接写git+https://...不符合这个规范,所以会触发语法解析错误。
PEP 508对VCS类型依赖的标准格式是:包名 @ git+https://仓库地址@版本标签,而你原来写的git+https://...#egg=mypackage是pip历史兼容的写法,并不符合PEP 508标准。
修复方案
有两种可行的解决方式:
方式一:修改requirements.txt为PEP 508格式
把原来的git依赖行替换成标准格式:
# 原内容 git+https://github.com/myorg/myrepo@v1.0.0#egg=mypackage # 修改后 mypackage @ git+https://github.com/myorg/myrepo@v1.0.0
修改后,不管是用pip install -r requirements.txt还是通过setup.cfg引用,都能正常解析安装。
方式二:在setup.cfg中单独声明VCS依赖
如果不想修改requirements.txt,可以在setup.cfg里单独列出符合PEP 508格式的VCS依赖,同时保留对普通依赖的文件引用:
[options] install_requires = mypackage @ git+https://github.com/myorg/myrepo@v1.0.0 # 引用其他普通依赖(确保requirements.txt里不再包含上面的git依赖) file: requirements.txt
内容的提问来源于stack exchange,提问作者Craig Ringer
相关产品推荐
相关产品推荐

