如何使用 Nexus Repository 配置 PyPI 包管理
目录
Overview仓库类型概述典型架构前提条件创建 PyPI Proxy 仓库创建 PyPI Hosted 仓库创建 PyPI Group 仓库使用 Nexus 仓库与 Python 客户端场景 1:使用 twine 上传到托管仓库场景 2:使用 pip 从 PyPI Group 仓库下载和安装包配置 pip 匿名访问配置 pip 认证访问配置注意事项Overview
Python 包索引(Python Package Index,简称 PyPI)是由全球 Python 开发者社区提供的庞大开源 Python 包仓库。官方索引地址为 https://pypi.org,该网站由 Python Software Foundation 维护。
Nexus Repository 支持代理 Python 包索引。通过利用官方 Python 包索引中的包资源,避免重复下载,从而减少访问 Python 包时的时间和带宽消耗。
此外,您还可以将自己的包发布到私有索引作为托管仓库,并将远程和私有仓库暴露为仓库组,以一个便捷的 URL 合并并暴露多个仓库的内容。
仓库类型概述
PyPI Proxy - 作为远程 PyPI 仓库(如 https://pypi.org)的代理,缓存包以实现更快访问和减少带宽使用。当请求包时,先检查本地缓存,若未命中则从远程仓库下载并缓存。
PyPI Hosted - 存储直接上传到 Nexus 实例的包,通常用于私有包、内部库或需要完全控制的包。
PyPI Group - 将多个 PyPI 仓库(代理、托管或其他组)合并为单一逻辑仓库。当从组中请求包时,Nexus 按指定顺序搜索成员仓库直到找到包。注意:PyPI Group 仓库仅用于下载 PyPI 包,不用于部署 PyPI 包。
典型架构
常见配置包括:
- PyPI Hosted - 用于私有/内部包
- PyPI Proxy - 用于缓存来自 PyPI.org 的公共包
- PyPI Group - 合并托管和代理仓库,提供统一访问入口
该架构允许客户端使用单一仓库 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:根据需求配置仓库搜索顺序
使用 Nexus 仓库与 Python 客户端
在进行以下场景操作前,可从 Nexus Web 界面获取仓库 URL。点击 Browse,选择已创建的仓库,点击 Copy 按钮获取仓库 URL。该 URL 将用于以下配置示例。
场景 1:使用 twine 上传到托管仓库
此场景演示如何使用 PyPI Hosted 仓库部署并发布自有 Python 包,适用于:
- 私有包:内部库和应用,不希望发布到公共 PyPI
- 自定义构建:带有特定配置的公共包修改版本
- 专有软件:需要受控分发的商业或机密包
- 开发包:用于内部测试和验证的预发布版本
流程包括构建 Python 包、配置部署目标,并上传包到 Nexus PyPI Hosted 仓库。
成功上传包到 PyPI Hosted 仓库后,可通过 Nexus Web 界面查看和管理:Browse → 选择 PyPI Hosted 仓库 → Browse Package Contents
场景 2:使用 pip 从 PyPI Group 仓库下载和安装包
此场景演示如何配置 pip 使用 PyPI Group 仓库管理 Python 包依赖,适用于:
- 统一包访问:使用单一仓库 URL 访问公共包(通过代理)和私有包(通过托管)
- 性能优化:本地缓存常用包,减少下载时间和带宽消耗
- 集中管理:所有包依赖通过单一 Nexus 实例管理
- 安全控制:集中认证和访问控制包下载
流程包括配置 pip 使用 PyPI Group 仓库 URL,自动搜索成员仓库查找并下载所需包。
配置 pip 匿名访问
配置 pip 认证访问
若 Nexus 禁用匿名访问,需要在 pip.conf 文件中添加用户名和密码:
配置注意事项
- 密码中的特殊字符必须进行 URL 编码(例如
@变为%40) - 注意存储明文凭据的安全风险
- 仓库 URL 必须始终以
/simple/结尾 - 若 Nexus 使用不安全连接或不受信任证书,需配置
trusted-host参数