使用缓存机制可以显著减少对外部源的请求量,从而提高下载速度,并降低被源站封禁的风险。下面详细解释如何在本地服务器上设置和使用pip缓存机制。
缓存机制的基本原理
缓存机制的原理是在本地服务器上保存已经下载过的Python包,当其他服务器请求同样的包时,本地服务器可以直接提供,而无需再次从外部源下载。常见的缓存实现方式包括使用devpi
或pypiserver
等工具。
一、PyPI Server 比较
PyPI Server | PyPI 代理镜像 | 本地缓存 | 单元测试 | 系统测试 | 搜索 |
devpi | 支持 | 支持 | ★★★★ | ★★★★★ | 支持 Web + XML RPC |
DjangoPyPI | 支持 | 不支持 | ★ | 无 | 支持 Web + XML RPC |
chishop | 不支持 | 不支持 | 无 | 无 | 不支持 |
pypiserver | 支持 | 不支持 | ★★★★★ | 无 | 不支持 |
Cheese Shop | 不支持 | 不支持 | ★★ | 无 | 支持 Web + XML RPC |
localshop | 支持 | 支持 | ★★★★ | 无 | 只支持 XML RPC |
mypypi | 不支持 | 不支持 | ★★ | 无 | 不支持 |
proxypypi | 支持 | 支持 | 无 | 无 | 不支持 |
Flask-Pypi-Proxy | 支持 | 支持 | 无 | 无 | 不支持 |
二、devpi 特有的功能
索引继承
pypiserver 等只支持两个索引: 私有的索引和公有的索引。 在私有索引上找不到 Python 包时, 就会去公有索引上找。 devpi 对这一功能做了扩展, devpi 可以支持多个索引。同时,新索引可以继承之前的索引,这在维护多版本系统上十分有用。
支持集群部署
支持一台或多台服务器部署,来加速访问。还支持通过 json 接口,实时监控集群的状态。
支持导入导出功能
支持导出服务器状态,并在必要时重新导回服务器,恢复服务器状态。
Jenkins 集成
支持给索引设置 Jenkins 触发器,可以使用 tox 自动测试上传的包。
使用 devpi
构建本地 PyPI 代理和缓存
devpi
不仅是一个Python包的索引服务器,它还具有强大的缓存功能,能够缓存来自PyPI或其他索引服务器的包。以下是配置步骤:
安装 devpi
# 创建conda环境
conda create -n devpi_env
# 激活conda环境
conda activate devpi
# 下载devpi
pip install devpi
配置和运行devpi-server
# 初始化devpi服务器
devpi-init
# 启动devpi服务器
devpi-server --host=localhost --port=3141
使用devpi-client
# 登录(首次使用用root账户)
devpi use http://localhost:3141
devpi login root --password=''
# 创建新用户(替换为你的用户名)
devpi user -c your_username password=your_password
# 创建代理索引,它会缓存来自官方 PyPI 的包
devpi index -c your_username/pypi-proxy bases=root/pypi
成功创建服务:
更多高级功能等待探索。