欢迎使用 PHP!

版本信息

已安装扩展

  1. Core=8.5.5
  2. date=8.5.5
  3. lexbor=8.5.5
  4. openssl=8.5.5
  5. pcre=8.5.5
  6. sqlite3=8.5.5
  7. zlib=8.5.5
  8. ctype=8.5.5
  9. curl=8.5.5
  10. uri=8.5.5
  11. json=8.5.5
  12. fileinfo=8.5.5
  13. filter=8.5.5
  14. hash=8.5.5
  15. iconv=8.5.5
  16. SPL=8.5.5
  17. mbstring=8.5.5
  18. Zend OPcache=8.5.5
  19. session=8.5.5
  20. standard=8.5.5
  21. PDO=8.5.5
  22. pdo_sqlite=8.5.5
  23. Phar=8.5.5
  24. posix=8.5.5
  25. random=8.5.5
  26. readline=8.5.5
  27. Reflection=8.5.5
  28. libxml=8.5.5
  29. SimpleXML=8.5.5
  30. tokenizer=8.5.5
  31. dom=20031129
  32. xml=8.5.5
  33. xmlreader=8.5.5
  34. xmlwriter=8.5.5
  35. mysqlnd=mysqlnd 8.5.5
  36. cgi-fcgi=8.5.5
  37. bcmath=8.5.5
  38. exif=8.5.5
  39. intl=8.5.5
  40. mysqli=8.5.5
  41. pdo_mysql=8.5.5
  42. zip=1.22.8
  43. 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镜像源**,这能立刻获得下载速度的提升。