Nexus 3 OSS无法直接支持私有Python包管理——因其开源版缺失PyPI仓库类型、不生成PEP 503兼容的/simple/索引,插件已停更且不兼容新版;推荐改用Artifactory CE或devpi,二者原生支持PyPI协议与pip生态。

直接在 Nexus 3 中统一维护私有 Python 模块的发布与拉取——行不通。Nexus OSS(开源版)不支持 PyPI 协议,没有 pypi 仓库类型,也没有 PEP 503 兼容的 /simple/ 索引页生成能力。
为什么 Nexus 3 OSS 创建不了真正的 PyPI 仓库
执行 curl -X GET "http://localhost:8081/service/rest/v1/repositories" 查看可用类型,返回中不含 pypi;尝试 POST 创建 type: "pypi" 或 type: "pythons" 仓库,会直接返回 400 Bad Request 和错误信息:Repository type 'pypi' is not supported。这不是配置遗漏,是功能层面缺失——Nexus 3 开源版从设计上就未集成 PyPI 支持,插件(如已停更的 nexus-pypi-plugin)不兼容 3.50+ 版本,且无安全更新。
硬用 Nexus 当 Python 仓库的后果与折中做法
若仍想用 Nexus 托管 wheel 文件,只能退化为 Raw 仓库,但必须接受以下限制:
- 必须手动上传
.whl或.tar.gz,路径需严格匹配命名规范:package-name/version/package-name-version-py3-none-any.whl - 无法生成
/simple/package-name/页面,pip install mylib默认行为失效,必须显式加参数:pip install --find-links http://nexus.example.com/repository/python-packages/ --no-deps mylib -
pip-tools、poetry、pipenv等工具会跳过该源或报错,因它们依赖 PEP 503 标准索引结构 - 无依赖解析、无版本语义(
==/~=)、无 GPG 签名验证、无上传审计日志
真正能统一发布与拉取的替代方案
推荐两个开箱即用、pip 原生兼容的选项:
-
Artifactory CE(免费版):Web UI 中直接提供
PyPI (Local)类型仓库,启用后自动暴露/api/pypi/pypi-local/simple/;支持twine upload、pip install -i、virtual repository 聚合 pypi.org + 内部源;权限、签名、构建关联全内置 -
devpi:轻量级,Docker 一行启动:
docker run -p 3141:3141 devpi/devpi:latest;自带索引层级(root/pypi代理官方源,root/myproject托管私有包),pip install -i http://localhost:3141/root/myproject/+simple/ mylib直接生效
这两个方案都原生输出 content-type: text/html; charset=utf-8 和正确的 Link 头,pip search(虽已弃用)和 pip install --pre 行为稳定,CI 脚本无需 hack。
如果已有 Nexus 且不能换系统,只做代理缓存可行吗
可以,但仅限于代理公网 PyPI(如 pypi.org),不能托管私有包:
- 创建
proxy类型仓库,Remote Storage URL 设为https://pypi.org/simple/ - 再建一个
group,把该 proxy 加入其中,对外暴露 group 地址 - 客户端配置
pip install -i http://nexus.example.com/repository/pypi-group/simple/ requests
注意:group 对 /simple/ 路径的重定向处理在 Nexus 3.x 中不稳定,某些 pip 版本(如 23.0+)会因 302 响应头缺失 Content-Type 而 fallback 到 XMLRPC,导致超时或失败;Nexus 4 尚未解决所有边缘 case。这种代理只缓解公网访问问题,不解决私有模块发布与统一治理需求。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











