pip使用requirements.txt安装私有GitHub仓库依赖时弹出密码提示
问题原因
你在终端直接执行安装命令时,${API_TOKEN}是由当前使用的shell(bash/zsh等)提前完成值替换,拼出完整带token的URL后再传给pip,因此可以正常安装。
但将地址写入requirements.txt后,shell不会解析文件内部的文本内容,变量替换逻辑由pip自行完成。你之前使用的URL格式省略了GitHub HTTPS鉴权要求的用户名段,pip无法正确识别URL中的认证部分,不会把解析后的token正确传给git底层,最终触发git的密码输入提示。另外GitHub已经禁用了账号密码通过HTTPS协议操作仓库的鉴权方式,所以弹出提示时输入账户密码也必然会安装失败。
解决方法
把requirements.txt中对应的依赖行修改为如下格式即可:
git+https://x-access-token:${API_TOKEN}@github.com/johnf1004/my_package.git
这个格式是GitHub官方支持的OAuth令牌HTTPS鉴权标准格式,加上x-access-token:作为用户名占位后,pip可以正确识别URL的认证段,正常完成环境变量替换并传递给git,不会再弹出密码提示。
额外排查点
如果修改后仍然安装失败,可以逐一检查以下配置:
- 执行pip安装命令的终端会话中,环境变量
API_TOKEN已正确加载,可以先执行echo $API_TOKEN确认能正常输出令牌值,避免出现变量仅在部分终端会话生效、未被继承的问题 requirements.txt中的依赖行不要添加任何单引号、双引号包裹,也不要在行尾、变量名周围添加多余空格,否则会被pip识别为URL的一部分导致解析失败- 如果使用的pip版本低于20.0,先执行
pip install --upgrade pip升级到新版,旧版本pip对URL内嵌环境变量的解析存在已知bug
内容的提问来源于stack exchange,提问作者John F
相关产品推荐
相关产品推荐

