建立本地 Pip 中心仓(私有 PyPI 仓库)非常有用,特别是在企业内网或需要管理私有包的情况下。以下是几种主流的实现方式:
方法一:使用 pypiserver(最简单、轻量)
pypiserver 是一个最小化的 PyPI 兼容服务器,最适合快速搭建。
1. 安装 pypiserver
pip install pypiserver
2. 创建包存储目录
mkdir -p ~/pypi-packages
3. 启动 pypiserver
# 最简单的方式,无认证
pypi-server -p 8080 ~/pypi-packages
# 带密码认证(推荐)
pypi-server -p 8080 -P .htpasswd ~/pypi-packages
4. 设置密码认证(可选)
# 安装 apache2-utils 来创建密码文件
sudo apt-get install apache2-utils
# 创建用户和密码
htpasswd -sc .htpasswd username
5. 使用本地仓库
上传包:
pip install twine
twine upload --repository-url http://localhost:8080/ dist/* -u username -p password
从本地仓库安装:
pip install --index-url http://localhost:8080/simple/ your-package-name
方法二:使用 devpi(功能强大、推荐)
devpi 是一个功能更完整的 PyPI 镜像和打包工具。
1. 安装 devpi
pip install devpi-server devpi-client
2. 初始化并启动服务器
# 初始化服务器
devpi-server --init
# 启动服务器(后台运行)
devpi-server --start
# 查看状态
devpi-server --status
3. 配置客户端
# 连接本地服务器
devpi use http://localhost:3141
# 创建用户
devpi user -c username password=yourpassword
# 创建索引
devpi index -c dev bases=root/pypi
4. 使用 devpi
上传包:
devpi upload
安装包:
pip install --index-url http://localhost:3141/username/dev/+simple/ your-package-name
方法三:使用 Docker 运行 pypiserver(最方便)
1. 创建 Docker Compose 文件
创建 docker-compose.yml:
version: '3'
services:
pypiserver:
image: pypiserver/pypiserver:latest
container_name: pypiserver
ports:
- "8080:8080"
volumes:
- ./packages:/data/packages
- ./auth:/data/auth
command: -P /data/auth/.htpasswd -a update,download,list /data/packages
restart: unless-stopped
2. 创建认证文件
mkdir -p auth packages
htpasswd -b auth/.htpasswd username password
3. 启动服务
docker-compose up -d
方法四:使用 Sonatype Nexus(企业级)
Nexus 是一个专业的制品库管理器,支持多种包格式。
1. 使用 Docker 运行 Nexus
docker run -d -p 8081:8081 --name nexus sonatype/nexus3
2. 访问管理界面
打开浏览器访问:http://localhost:8081
- 默认用户名:
admin - 初始密码:查看容器日志获取
admin.password
3. 创建 PyPI 仓库
在管理界面中:
- 创建新的
pypi (hosted)仓库 - 配置认证和权限
4. 配置使用
pip install --index-url http://localhost:8081/repository/pypi-hosted/simple/ package-name
配置客户端永久使用本地仓库
1. 在 pip.conf 中配置
创建或编辑 ~/.pip/pip.conf:
[global]
index-url = http://localhost:8080/simple/
trusted-host = localhost
[install]
trusted-host = localhost
2. 或者在项目中使用 requirements.txt
--index-url http://localhost:8080/simple/
--trusted-host localhost
package1==1.0.0
package2==2.0.0
打包和上传本地包
1. 创建 setup.py
from setuptools import setup, find_packages
setup(
name="your-package",
version="0.1.0",
packages=find_packages(),
)
2. 构建包
python setup.py sdist bdist_wheel
3. 上传到本地仓库
# 使用 twine
twine upload --repository-url http://localhost:8080 dist/* -u username -p password
# 或使用 setuptools
python setup.py sdist upload -r http://localhost:8080
总结对比
| 方案 | 难度 | 功能 | 适合场景 |
|---|---|---|---|
| pypiserver | ⭐☆☆ | 基础 | 快速搭建、小型团队 |
| devpi | ⭐⭐☆ | 丰富 | 开发测试、中型团队 |
| Nexus | ⭐⭐⭐ | 企业级 | 大型企业、多语言支持 |
| Docker | ⭐⭐☆ | 便捷 | 容器化部署 |
推荐选择:
- 个人/小团队:使用
pypiserver+ Docker - 开发团队:使用
devpi - 企业环境:使用
Nexus
无论选择哪种方案,建立本地 Pip 仓库都能显著提高包管理效率,特别是在网络受限或需要管理私有包的环境中。
2765

被折叠的 条评论
为什么被折叠?



