如何下载仅包含带有 Bandersnatch 的 Python 3.6.8、3.8.6、3.10.6 包的 Pypi 存储库以托管在离线实验室中?

问题描述 投票:0回答:1

我想为我的家庭实验室设置一个离线 pypi 存储库(与互联网断开连接,仅离线实验室)。

我想下载所有仅适用于 3 个版本的 python 的 .tar.gz/.whl 文件(而不是下载 pypi 中的所有内容)。

官方 python 文档建议使用 Bandersnatch,但我没有运气。

它下载了大约 1.1TB 的软件包,配置如下,但从未下载过“requests”软件包(应该是 requests-2.31.0.tar.gz 或 requests-2.31.0-py3-non-any.whl )。这些文件未下载。

有人可以验证我的 banderswitch 配置文件吗:

# cat /etc/bandersnatch.conf | grep -v '^;' | sed '/^$/d'
[mirror]
directory = /mnt/mylabnas01/repos/pypi
json = false
release-files = true
cleanup = false
master = https://pypi.org
timeout = 10
global-timeout = 1800
workers = 5
hash-index = false
simple-format = ALL
stop-on-error = false
storage-backend = filesystem
verifiers = 3
compare-method = hash
[allowlist]
platforms =
    py3.6.8
    py3.8.6
    py3.8.7
    py3.10.6

当时,我使用上面的配置文件为“/etc/bandersnatch.conf”。并运行 bandersnatch 镜像 ...大约 5 天后,它下载了 1.1TB 的软件包。

# du -sh ./pypi/web/*
0       local-stats
1.1T    packages
834M    simple

它创建了一个包含如下目录的文件夹:

./pypi/web/simple/
./pypi/web/packages/a9/09/78fd02c25977348689dbec2040e92c93ce743073842132c0e9f9910a223e/flask_dance-6.2.0-py3-none-any.whl
./pypi/web/packages/91/c8/cfbf90d7d1d148c5e0be4744d98acf900ce14486257407dd0565c667b892/flaskconstructicon-1.0.3-py3-none-any.whl
./pypi/web/packages/91/53/b0a9fcc1b1297f51e68b69ed3b7c3c40d8c45be1391d77ae198712914392/flask_sqlalchemy-3.1.1.tar.gz
./pypi/web/packages/91/6a/161c7730b8d55c88ec826d7b389098787939427c3202270cb9d07df73746/flask_image_search-0.5.0-py2.py3-none-any.whl
./pypi/web/packages/91/cc/7b14c479b4631cfaf6d582cf9c3511717f6dc5df8fda7037b53da6f5cf43/aa_standingsrequests-1.3.0-py3-none-any.whl
./pypi/web/packages/da/57/33191298260e491d1d4fea7e6a10fac124b6fc90b5fdbe368d32d31ee6a7/flask_sqlalchemy_whoosh-0.1.2-py2.py3-none-any.whl
... and so forth.

有 zips/wheel 文件,所以 bandersnatch 确实下载了这些文件,但在搜索“requests”时却没有下载。

我该如何解决这个问题?

  • 20231109:固定问题英语:抱歉,我原来的问题有点含糊。感谢您的反馈。
python cdn rsync pypi bandersnatch
1个回答
0
投票

问题是有些包只会针对旧版本的 python 发布,但实际上与新版本向前兼容。这意味着您不能真正将下载限制为仅某些固定的 python 版本。

但是,您可以将一些不需要的版本/平台列入黑名单,以减少下载总量。例如:

[blocklist]
platforms =
    macos
    freebsd
    py2.4
    py2.5
    py2.6
    py2.7

请注意,您只能指定不超过次要版本的 python 版本。您可以提供补丁版本,但它似乎被忽略了。有关受支持平台的完整列表,请参阅此处的文档

此外,您只能下载每个软件包的最新版本。我不会推荐 X=1,因为您会遇到要跳过的有错误的软件包版本,或者您会发现某些软件包明确不允许某些存在已知问题的依赖项的特定版本。将其设置为 3 或 5 之类的值通常是空间和灵活性之间的良好折衷。您偶尔可能会遇到一个只需要某些依赖项的非常特定版本的包(您可能没有),但这种情况非常罕见。此配置如下所示:

[latest_release]
keep = 3 

最后,您还可以通过包大小进行限制,排除一些过大的包,这些包只是将大量资源与核心包捆绑在一起。我个人不推荐这样做——你会发现你不小心删除了一些常见的包,比如 numpy 和 scipy。只要你将阈值设置得足够高,你就可以使用它,但如果是这样,你需要验证你没有丢弃任何重要的东西。为了完整起见,该选项如下所示:

[size_project_metadata]
max_package_size = 1G

每个过滤器对应的插件名称如下:

[plugins]
enabled =
    exclude_platform
    latest_release
    size_project_metadata

此外,我建议您在

json = true
部分下启用
[mirror]
。它并没有真正使用那么多额外的空间,让您的生活更简单,并且还可以让您根据需要设置
pip search
功能。

我的上述建议来自于使用潘达斯奈基管理我自己的离线镜像的个人经验。我保留了不在我不使用的操作系统平台上的所有 python-3,最新 5 个版本,没有包大小限制。它工作得很好,我只记得一个由于过度限制的依赖项声明而遇到问题的包,我通过使用

pip install --no-dependencies PACKAGE
强制安装较新版本的依赖项和包本身来解决这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.