如何使用 Nexus Repository 配置 PyPI 包管理
由于 Nexus 3.81 Community Edition 的限制,该版本已停止维护。当使用达到配额限制(总组件数 100,000 和每日请求数 200,000)时,实例将无法正常工作。
如果您已经升级到 3.81 版本,请按照回滚到 Nexus 3.76 指南进行降级。
有关 Community Edition 限制的更多信息,请参见 Community Edition Limitations。
目录
Overview仓库类型概述典型架构前提条件创建 PyPI Proxy 仓库创建 PyPI Hosted 仓库创建 PyPI Group 仓库在 Python 客户端中使用 Nexus 仓库场景 1:使用 twine 上传到 hosted 仓库场景 2:使用 pip 从 PyPI Group 仓库下载和安装包配置 pip 匿名访问配置 pip 认证访问配置注意事项Overview
Python Package Index,简称 PyPI,是由全球 Python 开发者社区提供的庞大开源 Python 包仓库。官方索引地址为 https://pypi.org,该网站由 Python Software Foundation 维护。
Nexus Repository 支持代理 Python Package Index,利用官方 PyPI 中的包资源,避免重复下载,从而减少访问 Python 包时的时间和带宽消耗。
此外,您还可以将自己的包发布到私有索引作为 hosted 仓库,并将远程和私有仓库暴露为 repository group,合并多个仓库内容,通过一个便捷的 URL 统一访问。
仓库类型概述
PyPI Proxy - 作为远程 PyPI 仓库(如 https://pypi.org)的代理,缓存包以加快访问速度并减少带宽使用。请求包时,先检查本地缓存,若未命中则从远程仓库下载并缓存。
PyPI Hosted - 存储直接上传到 Nexus 实例的包,通常用于私有包、内部库或需要完全控制的包。
PyPI Group - 将多个 PyPI 仓库(proxy、hosted 或其他 group)组合成一个逻辑仓库。请求包时,Nexus 按指定顺序搜索成员仓库直至找到包。注意:PyPI Group 仓库仅用于下载 PyPI 包,不用于部署。
典型架构
常见配置包括:
- PyPI Hosted - 用于私有/内部包
- PyPI Proxy - 缓存来自 PyPI.org 的公共包
- PyPI Group - 组合 hosted 和 proxy 仓库,提供统一访问入口
该架构允许客户端使用单一仓库 URL 无缝访问私有和公共包。
前提条件
- 已部署 Nexus 实例并使用管理员账号登录。
- 本地已安装 Python 环境及 pip 包管理器。
创建 PyPI Proxy 仓库
若需使用 PyPI Proxy 缓存 PyPI 包,需要创建 PyPI Proxy 仓库。注意:nexus 实例应可访问互联网。
在 Nexus 界面按以下步骤操作:
- 点击
Settings→Repositories→Create repository→PyPI (proxy) - 填写配置详情,点击
Create repository
配置参数:
- Name:输入仓库名称,如
pypi-proxy - Remote storage:输入远程仓库 URL,如
https://pypi.org - Storage:根据需求选择合适的存储类型
创建 PyPI Hosted 仓库
若需使用 PyPI Hosted 存储 PyPI 包,需要创建 PyPI Hosted 仓库。
在 Nexus 界面按以下步骤操作:
- 点击
Settings→Repositories→Create repository→PyPI (hosted) - 填写配置详情,点击
Create repository
配置参数:
- Name:输入仓库名称,如
pypi-hosted - Storage:根据需求选择合适的存储类型
- Deployment policy:根据需求选择
Allow redeploy或Disable redeploy
创建 PyPI Group 仓库
在 Nexus 界面按以下步骤操作:
- 点击
Settings→Repositories→Create repository→PyPI (group) - 填写配置详情,点击
Create repository
配置参数:
- Name:输入仓库名称,如
pypi-group - Member repositories:选择之前创建的
pypi-proxy和pypi-hosted仓库 - Order:根据需求配置仓库搜索顺序
在 Python 客户端中使用 Nexus 仓库
在进行以下场景操作前,可从 Nexus Web 界面获取仓库 URL。点击 Browse,选择已创建的仓库,点击 Copy 按钮复制仓库 URL。该 URL 将用于下面的配置示例。
场景 1:使用 twine 上传到 hosted 仓库
本场景演示如何使用 PyPI Hosted 仓库部署并发布自己的 Python 包,适用于:
- 私有包:不希望发布到公共 PyPI 的内部库和应用
- 自定义构建:带有特定配置的公共包修改版本
- 专有软件:需要受控分发的商业或机密包
- 开发包:用于内部测试和验证的预发布版本
流程包括构建 Python 包、配置部署目标,并上传包到 Nexus PyPI Hosted 仓库。
成功上传包到 PyPI Hosted 仓库后,可通过 Nexus Web 界面查看和管理:Browse → 选择 PyPI Hosted 仓库 → 浏览包内容
场景 2:使用 pip 从 PyPI Group 仓库下载和安装包
本场景演示如何配置 pip 使用 PyPI Group 仓库管理 Python 包依赖,适用于:
- 统一包访问:使用单一仓库 URL 访问公共包(通过 proxy)和私有包(通过 hosted)
- 性能优化:本地缓存常用包,减少下载时间和带宽消耗
- 集中管理:所有包依赖通过单一 Nexus 实例管理
- 安全控制:集中认证和访问控制包下载
流程包括配置 pip 使用 PyPI Group 仓库 URL,自动搜索成员仓库查找并下载所需包。
配置 pip 匿名访问
配置 pip 认证访问
若 Nexus 禁用匿名访问,需要在 pip.conf 文件中添加用户名和密码:
配置注意事项
- 密码中的特殊字符必须进行 URL 编码(例如
@编码为%40) - 注意存储明文凭据的安全风险
- 仓库 URL 必须以
/simple/结尾 - 若 Nexus 使用不安全连接或不受信任证书,需配置
trusted-host参数