pip忽略.netrc及pip.conf配置 私有PyPI源安装认证异常
你的配置存在3处明确错误,分别对应.netrc凭据不生效、pip.conf不被识别两个故障现象:
1. .netrc配置格式与权限错误
.netrc的machine字段仅允许填写主机域名,禁止携带协议头(http/https)、路径后缀,你当前填写完整URL的写法会导致pip完全无法匹配到对应主机的凭据,因此会弹出交互式凭据输入提示。
正确的.netrc(路径为/home/jenkins/.netrc)内容如下:
machine artifactory.domain.dev login username1 password password1
配置完成后必须修正文件权限,Linux系统出于安全机制会直接忽略权限大于600的.netrc文件,执行以下命令修正:
chmod 600 /home/jenkins/.netrc
2. pip.conf存放路径错误
你将pip.conf直接放在/home/jenkins根目录的写法不符合pip的配置加载规则,因此pip完全没读取到你的私有源配置,才会默认走公网pypi源。
Linux环境下jenkins用户对应的用户级pip配置正确路径二选一即可:
~/.config/pip/pip.conf(新版pip默认优先加载路径)~/.pip/pip.conf(旧版pip兼容路径)
如果需要让虚拟环境默认使用该配置,也可以将配置文件放在虚拟环境根目录下的pip.conf中,优先级高于用户级配置。
3. pip.conf源地址协议不一致
你当前pip.conf中填写的index-url是http://开头的HTTP协议地址,但你命令行-i参数传入的是https://开头的HTTPS地址,协议不匹配也会导致配置无法命中,同时如果你的Artifactory服务强制HTTPS,HTTP请求会被直接拒绝。
正确的pip.conf内容如下,补充trusted-host配置避免自签名证书校验失败:
[global] index-url = https://artifactory.domain.dev/artifactory/api/pypi/pypi-remote/simple trusted-host = artifactory.domain.dev
配置验证
所有修正完成后,执行pip config list命令,如果输出中包含你配置的global.index-url、global.trusted-host项,说明pip已经正确加载配置。此时直接执行pip安装命令无需加-i参数,也不会弹出凭据输入提示,不会请求公网pypi源。
内容的提问来源于stack exchange,提问作者vel

