镜像工具,实现了PEP 381的客户端(镜像)端
项目描述
这是一个根据 PEP 381
+ PEP 503
+ PEP 691
开发的 PyPI 镜像客户端。详细信息请访问:https://www.pythonlang.cn/dev/peps/pep-0381/。
- bandersnatch >=6.0 实现 PEP691
- bandersnatch >=4.0 支持 Linux、MacOSX + 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/ - 可以创建一个
blocklist
或allowlist
来减少镜像的大小。您可能需要分析 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 上节省带宽
- 如果它们可以以 插件 形式存在,则可以接受自定义功能和请求
- 例如,请参阅
blocklist
和allowlist
插件
- 例如,请参阅
联系
如果您有任何问题或评论,请向 https://github.com/pypa/bandersnatch/issues/new 提交错误报告
- Discord:#bandersnatch 现在位于 PyPA Discord 服务器中。要加入,请访问 https://discord.com/invite/pypa
行为准则
所有与 bandersnatch 项目的代码库、问题跟踪器、聊天室和邮件列表互动的人都应遵守 PSF 行为准则。
致谢
此客户端基于 Martin v. Loewis 的原始 pep381client。
Richard Jones 在 PyCon 2013 上非常耐心地回答问题,并通过实现一些 PyPI 增强功能使协议更可靠。
Christian Theune 为创建和维护多年的 bandersnatch
!
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分发
构建分发
bandersnatch-6.5.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 561ec7c17f7565a804199585e0a456974f9d7c1710ca888439b01e4acee7d3a4 |
|
MD5 | 7072cee9a2c11aa3d32b0dbc3317d8a7 |
|
BLAKE2b-256 | babcd287ae91f235852fd139edc17271da47702a5f6b6e111e6dea0f670455ce |
bandersnatch-6.5.0-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f257df14759395226d3e54cb4c3414064ef9c7081199fb7b537e33def25e82d5 |
|
MD5 | 9eaf683ac18c7cf37fff4a0286e83695 |
|
BLAKE2b-256 | 0dcd1f3d86a754f8ab4c671da9f2bc17167c67a2f8d6f99098c18d6d7e4e053a |