You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

PyPI迁移至pypi.org后Sonatype Nexus代理无法拉取包求助

解决Sonatype Nexus无法从新PyPI源拉取包的方案

我之前帮团队处理过完全一样的问题!下面是几个经过验证的解决方案,建议按顺序尝试:

1. 检查并更新PyPI代理仓库的URL配置

这是最常见的问题根源。旧的PyPI源地址https://pypi.python.org/simple已经被废弃,必须替换为新的地址:

  • 登录Nexus管理界面,找到你的PyPI代理仓库
  • 进入Configuration标签,在Remote Storage区域,把URL修改为https://pypi.org/simple/(注意末尾的斜杠,部分Nexus版本对这个要求严格)
  • 保存配置后,先尝试手动拉取一个包测试

2. 清理Nexus缓存并重建索引

旧的缓存和索引可能残留了旧源的信息,导致拉取失败:

  • 进入目标PyPI代理仓库,切换到Browse标签
  • 点击右上角的Clear Cache按钮,等待缓存清理完成
  • 再切换到Repair标签,选择Rebuild Index,让Nexus重新从新源获取索引数据
  • 必要时可以重启Nexus服务,确保缓存完全失效

3. 验证网络连通性与SSL证书

新的PyPI源使用现代SSL证书,需确保Nexus服务器能正常访问:

  • 在Nexus服务器的终端执行命令:curl -I https://pypi.org/simple/,如果返回HTTP/2 200则网络正常
  • 如果出现SSL证书错误,需要:
    • 更新服务器系统的CA证书库(比如Ubuntu用apt install ca-certificates,CentOS用yum update ca-certificates
    • 或者在Nexus的SSL Truststore中手动添加pypi.org的根证书

4. 检查Nexus版本兼容性

较老的Nexus版本(比如2.x早期版本)可能不支持新PyPI源的TLS协议要求:

  • 如果使用Nexus 2.x,建议升级到最新的2.x稳定版,或者直接迁移到Nexus 3.x(更推荐,对现代PyPI源支持更好)
  • 临时解决方案:在Nexus的启动脚本中添加JVM参数,强制启用TLS 1.2:
    -Dhttps.protocols=TLSv1.2
    
    修改后重启Nexus服务

5. 排查内网代理/防火墙限制

如果Nexus部署在企业内网,可能被防火墙或代理拦截:

  • 确认防火墙规则允许Nexus服务器访问pypi.org的443端口
  • 如果使用HTTP代理,检查Nexus的代理配置是否正确指向新的PyPI源,且没有拦截HTTPS流量
  • 可以尝试在Nexus服务器上直接访问https://pypi.org/simple/requests/,看是否能正常返回页面

6. 基于错误信息精准排查

如果以上步骤都无效,建议手动测试拉取并查看具体错误:

  • 使用pip从Nexus仓库拉取包,命令示例:
    pip install requests --index-url http://<你的Nexus地址>/repository/pypi-proxy/simple/
    
  • 根据返回的错误提示定位问题:比如404 Not Found可能是URL配置错误,SSL: CERTIFICATE_VERIFY_FAILED是证书问题,Connection refused是网络/防火墙问题

内容的提问来源于stack exchange,提问作者Govind Mantri

火山引擎 最新活动