欢迎使用 PHP!
版本信息
已安装扩展
- Core=8.5.5
- date=8.5.5
- lexbor=8.5.5
- openssl=8.5.5
- pcre=8.5.5
- sqlite3=8.5.5
- zlib=8.5.5
- ctype=8.5.5
- curl=8.5.5
- uri=8.5.5
- json=8.5.5
- fileinfo=8.5.5
- filter=8.5.5
- hash=8.5.5
- iconv=8.5.5
- SPL=8.5.5
- mbstring=8.5.5
- Zend OPcache=8.5.5
- session=8.5.5
- standard=8.5.5
- PDO=8.5.5
- pdo_sqlite=8.5.5
- Phar=8.5.5
- posix=8.5.5
- random=8.5.5
- readline=8.5.5
- Reflection=8.5.5
- libxml=8.5.5
- SimpleXML=8.5.5
- tokenizer=8.5.5
- dom=20031129
- xml=8.5.5
- xmlreader=8.5.5
- xmlwriter=8.5.5
- mysqlnd=mysqlnd 8.5.5
- cgi-fcgi=8.5.5
- bcmath=8.5.5
- exif=8.5.5
- intl=8.5.5
- mysqli=8.5.5
- pdo_mysql=8.5.5
- zip=1.22.8
- ionCube Loader=15.5.0
同步PyPI镜像和同步APT仓库的逻辑类似,但使用的工具和面对的挑战不同。好消息是,**PyPI镜像的体量通常比完整的APT仓库要小**(官方统计总大小接近1TB),但同样不建议个人进行全量同步。
下面为你分别介绍**官方推荐的专业同步方案**,以及**更轻量的替代方案**。
### 方案一:使用官方推荐工具 `bandersnatch`(专业、完整)
这是PyPI官方推荐的镜像同步工具,功能强大,适合有长期维护需求的场景。
**核心优势与注意事项:**
* **官方认可**:遵循PEP 381等PyPI镜像规范,兼容性最好。
* **增量同步**:支持高效更新,首次完整同步后会大幅减少后续同步的数据量。
* **关键要求**:**存储文件系统的必须大小写敏感**(Linux原生支持,macOS也可,但Windows需要特定配置);需要Python 3.11及以上版本。
**基本部署流程:**
1. **安装 `bandersnatch`**
推荐在Python虚拟环境中安装,避免污染系统环境。
```bash
python3 -m venv bandersnatch-env
bandersnatch-env/bin/pip install bandersnatch
```
2. **生成并修改配置文件**
运行一次 `bandersnatch mirror` 命令,它会自动在 `/etc/bandersnatch.conf` 生成一个初始配置文件。按需修改关键配置项:
```ini
[mirror]
; 存储镜像文件的本地路径
directory = /data/pypi-mirror
; 上游源地址,默认就是官方PyPI
master = https://pypi.org
; 并发下载线程数,建议根据网络情况调整,避免过高
workers = 3
```
3. **执行首次同步**
运行 `bandersnatch mirror` 开始同步。**首次同步耗时很长**,请确保网络稳定。
4. **配置Web服务器对外发布**
将Web服务器的根目录指向配置文件中 `directory` 下的 `web/` 子目录。例如,使用Nginx时需要正确配置以支持PyPI的Simple API。
5. **设置定时任务**
通过cron或SystemD Timer设置定期任务(如每2小时)运行 `bandersnatch mirror` 以保持更新。
### 方案二:搭建轻量级私有仓库(个人/小团队推荐)
如果只是希望**分发自己开发的几个包**,而不是完整镜像整个PyPI,那么完全不需要同步,直接搭建一个私有仓库更轻量、快捷。
* **使用 `pypiserver`**:这是一个极简的PyPI服务器,安装配置非常简单。
```bash
# 1. 安装
pip install pypiserver
# 2. 创建包存储目录
mkdir ~/packages
# 3. 启动服务(默认监听8080端口)
pypi-server -p 8080 ~/packages
```
之后将你的`.whl`或`.tar.gz`包放入 `~/packages` 目录,团队成员即可通过 `pip install --index-url http://你的IP:8080/simple 你的包名` 进行安装。
### 📊 两种同步方案对比
| 方案 | `bandersnatch` 完整镜像 | `pypiserver` 私有仓库 |
| :--- | :--- | :--- |
| **适用场景** | 为整个公司/组织提供内网PyPI加速源 | 个人或小团队分发自己开发的私有包 |
| **同步数据量** | **巨大**(全量近1TB),需长时间同步 | **极小**,仅包含你上传的包 |
| **维护复杂度** | 较高,需管理存储、定期同步和更新 | 很低,几乎无需额外维护 |
| **资源占用** | 高(存储、带宽、计算) | 极低 |
### 💎 总结与建议
* **再次强调**:用 `bandersnatch` 同步**官方全量PyPI镜像**是一个**重量级任务**(数据量达TB级),在决定前务必评估你的存储和网络资源。它的官方文档明确指出,镜像源需提供JSON格式的Simple API响应,如果上游镜像只提供HTML格式,同步会失败。这对于从其他镜像源同步时尤其需要注意。
* **个人开发者最优解**:**强烈建议使用 `pypiserver` 方案**。它能以极低的成本满足你“分发个人包”的核心需求,同时避免了同步整个PyPI带来的巨大开销。
* **一个折中思路**:如果你的需求是**加速下载常用包**,而不是拥有完整镜像,更简单的做法是配置`pip`使用国内的**清华、阿里云或华中科技大学的PyPI镜像源**,这能立刻获得下载速度的提升。