跳转到主要内容

镜像工具,实现了PEP 381的客户端(镜像)端

项目描述

Code style: black Actions Status codecov.io Documentation Status Downloads


这是一个根据 PEP 381 + PEP 503 + PEP 691 开发的 PyPI 镜像客户端。详细信息请访问:https://www.pythonlang.cn/dev/peps/pep-0381/

  • bandersnatch >=6.0 实现 PEP691
  • bandersnatch >=4.0 支持 LinuxMacOSX + Windows
  • 文档

bandersnatch 维护者 正在寻找更多 帮助!请参阅我们的 维护者 文档,了解角色和责任。我们还要求您阅读我们的 使命宣言,以确保它与您对这个项目的想法相符。

  • 如果您感兴趣,请联系 @cooperlees

安装

以下说明将把 bandersnatch 可执行文件放在 bandersnatch/bin/bandersnatch 下的虚拟环境。

  • bandersnatch 需要 >= Python 3.8.0

Docker

这将拉取最新构建。如果需要,请使用特定的标签。

  • Docker 镜像包含 /bandersnatch/src/runner.py 以定期运行 bandersnatch 镜像
    • 请使用 /bandersnatch/src/runner.py --help 查看用法
  • 使用 docker,我们建议绑定挂载只读的 bandersnatch.conf
    • 默认为 /conf/bandersnatch.conf
docker pull pypa/bandersnatch
docker run pypa/bandersnatch bandersnatch --help

pip

这将安装最新稳定、发布的版本。

python3 -m venv bandersnatch
bandersnatch/bin/pip install bandersnatch
bandersnatch/bin/bandersnatch --help

快速入门

  • 运行 bandersnatch mirror - 它将在 /etc/bandersnatch.conf 中为您创建一个空配置文件。
  • 审查 /etc/bandersnatch.conf 并根据您的需求进行调整。
  • 再次运行 bandersnatch mirror。它将使用所有 PyPI 包的当前状态填充您的镜像。当前镜像包的大小可以在此处查看:https://pypi.ac.cn/stats/
  • 可以创建一个 blocklistallowlist 来减少镜像的大小。您可能需要分析 PyPI 下载以确定要添加到列表中的包。
  • 定期运行 bandersnatch mirror 以更新您的镜像。

Web 服务器

配置您的 Web 服务器以提供镜像的 web/ 子目录。为了支持 PEP691,我们需要尊重客户端请求的格式。

有关 nginx 的示例,请参阅我们的 banderx Docker 容器和 nginx.conf 示例配置。

  • 请注意,让您的 Web 服务器正确发布带有 UTF-8 字符集的 HTML 索引文件是一个好主意。没有它,索引页面也能正常工作,但如果有人查看页面,字符将看起来很奇怪。

  • 确保 Web 服务器使用 UTF-8 查找 unicode 路径名。nginx 默认就是这样做的 - 不确定其他的是否如此。

有关如何使用 NGINX 示例 Docker 镜像的说明,请访问我们的 官方文档

如果您正在寻找 docker-compose 示例,请访问 此处

cron 作业

您需要设置一个 cron 作业来运行镜像本身。

以下是一个示例,您可以将它放在 /etc/cron.d/bandersnatch

    LC_ALL=en_US.utf8
    */2 * * * * root bandersnatch mirror |& logger -t bandersnatch[mirror]

此示例假设您已安装了一个 logger 实用程序,该实用程序将命令的输出转换为 syslog 条目。

SystemD Timers 也是当今现代世界中的另一种替代方案。

维护

Bandersnatch 除了镜像数据外,不保留太多本地状态。一般来说,您只需要反复运行 bandersnatch mirror 来修复错误。

如果想要强制 Bandersnatch 与主 PyPI 进行全面检查

  • 运行 bandersnatch mirror --force-check,如果镜像目录中存在状态文件,则移动状态文件以实现完全同步。

请注意,完全同步可能需要数小时,具体取决于 PyPI 的性能和您的网络延迟和带宽。

其他命令

  • bandersnatch delete --help - 允许您指定要从镜像中删除的包(危险
  • bandersnatch verify --help - 遍历您的存储库并修复任何遗漏的文件 + 删除发现的任何未拥有文件(危险

操作说明

需要区分大小写的文件系统

您需要在区分大小写的文件系统上运行 Bandersnatch。

虽然文件系统并非严格区分大小写,但 OS X 本地执行得很好,Bandersnatch 在 OS X 上运行时也会正常工作。然而,将 Bandersnatch 数据目录打包并移至例如具有区分大小写文件系统的 Linux 会导致不一致。您可以通过删除状态文件并让 Bandersnatch 对数据进行完全检查来修复这些问题。

Windows 需要 elevated 提示

Bandersnatch 使用符号链接。在 Windows 上,默认情况下,非管理员用户没有此权限。要在 Windows 上运行 Bandersnatch,要么从提升命令提示符(即右键单击,以管理员身份运行)调用它,要么在组策略编辑器中给自己设置符号链接权限。

需要许多子目录

PyPI 有一个非常广泛的包列表,我们需要在平面目录中维护这些列表。对每个目录的子目录数量有限制的文件系统可能会遇到类似的问题

    2013-07-09 16:11:33,331 ERROR: Error syncing package: zweb@802449
    OSError: [Errno 31] Too many links: '../pypi/web/simple/zweb'

具体来说,我们建议避免使用 ext3。Ext4 及更高版本没有 32k 子目录的限制。

客户端兼容性

Bandersnatch 静态镜像仅与 PyPI 的 "静态"、可缓存的部分兼容,这些部分是支持包安装所需的。它不支持 PyPI 的更多动态 API,这些 API 可由各种客户端用于其他目的。

不受支持的 API 示例是 PyPI 的 XML-RPC 接口,它在运行 pip search 时使用。

Bandersnatch 任务

Bandersnatch 项目努力做到

  • 镜像 Python 包索引(https://pypi.ac.cn/)中的所有静态对象
  • Bandersnatch 的主要目标是支持主要全球索引到本地同步 仅限
  • 这将允许组织获得对 PyPI 的更低延迟访问,并在他们的 WAN 连接和 PyPI CDN 上节省带宽
  • 如果它们可以以 插件 形式存在,则可以接受自定义功能和请求
    • 例如,请参阅 blocklistallowlist 插件

联系

如果您有任何问题或评论,请向 https://github.com/pypa/bandersnatch/issues/new 提交错误报告

行为准则

所有与 bandersnatch 项目的代码库、问题跟踪器、聊天室和邮件列表互动的人都应遵守 PSF 行为准则

致谢

此客户端基于 Martin v. Loewis 的原始 pep381client。

Richard Jones 在 PyCon 2013 上非常耐心地回答问题,并通过实现一些 PyPI 增强功能使协议更可靠。

Christian Theune 为创建和维护多年的 bandersnatch

项目详情


发布历史 发布通知 | RSS订阅

下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

bandersnatch-6.5.0.tar.gz (90.1 kB 查看哈希值)

上传时间

构建分发

bandersnatch-6.5.0-py3-none-any.whl (107.0 kB 查看哈希值)

上传时间 Python 3

支持者: