私有源地址在公司浏览器里能打开,pip install 报 401 Client Error: Unauthorized for url .../simple/mypkg/。用户名密码直接写在命令里也一样。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

pip config set global.index-url https://user:token@pypi.corp.local/simple
python -c "import urllib.parse; print(urllib.parse.quote('p@ss:word'))"

浏览器带着域账号的会话,pip 用的是 Basic 认证或 token,凭据来源不同。密码里带 @ 或冒号时,直接拼进 URL 会被当成分隔符截断。这一点先确认清楚,后面就不用反复试。

碰到「私有源认证」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。

动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

具体做法是,把凭据写进 pip.conf 的 index-url 里 特殊字符先做 URL 编码;用环境变量 PIP_INDEX_URL 传 避免凭据留在 shell 历史;确认私有源要的是 token 还是域密码 两者不能混用;去掉 URL 里的特殊字符后重试 再看 401 是否消失。

改完照着核一遍,pip config list 能看到带凭据的地址 pip install 不再返回 401。

作者 9823189