如何制作一个本地的Pypi镜像而不访问internet并且可以进行搜索?

2024-06-10 01:45:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试在一个只能连接外部硬盘的服务器上创建一个完整的本地Pypi存储库镜像,其中包含pip搜索功能。说清楚一点,我不想要一个简单的缓存系统,服务器与其他机器连接在一个完全封闭的网络中,根本无法接入互联网。在

到目前为止,我所做的是使用bandersnatch转储每个pypi包,并且我可以在它前面使用一个简单的http服务器进行pip安装。我还检索了pypi的遗留源代码,使其在没有任何python包的情况下正常工作。我现在遇到的问题是把双方联系起来,我甚至不确定这样做是否可行。在

我还测试了pypiserver。它本可以做我想要的,但是它太慢了,最终导致pip search抛出超时(看起来它不是为处理那么多包而构建的)。在

最后,我看了一下devpi。似乎做的工作做得很好,我想做的,但我正在寻找一种方法,以导入我的班德斯纳奇转储到它容易。看起来我无法基于本地目录创建索引。在

谢谢你的回复。在


Tags: pip功能网络服务器pypi机器http镜像
1条回答
网友
1楼 · 发布于 2024-06-10 01:45:22

我不妨就如何让DevPi在我们的环境中很好地工作提供一个恰当的答案:

  1. 安装DevPi

DevPi需要Python 3!因此,请确保安装了python3版本的pip。使用它:

pip install -U devpi

(可能是根)应该能做到。在

  1. 确保服务器防火墙已打开

DevPi默认使用端口3141。如果firewall-cmd安装了类似

^{pr2}$

或系统上的等效命令。在

  1. 配置DevPi

DevPi将使用现成的PyPi。我们还希望能够“覆盖”我们自己的软件包,这些软件包只在内部提供。对于本地nabCERT包,需要一个内部索引。这件好事本身可以使用PyPi作为后备!在

选择要使用的devpi服务器-可能就是您所在的服务器

devpi use  http://localhost:3141

现在创建一个可以添加和管理内部包并使用它们登录的用户

devpi user -c myuser  password=mypassword
devpi login myuser  password mypassword

现在创建内部索引来保存本地包,同时确保它将使用PyPi作为“后备”

devpi index -c myindex bases=/root/pypi volatile=True
  1. 启动它

    devpi server host=0.0.0.0端口=3141 serverdir=/var/www/pypi

  2. 尝试安装软件包

    {sON安装

如果出现问题,请检查日志,在我们的例子中,它们位于/var/www/pypi/.xproc/devpi-server/xprocess.log

此时,如果已经成功地遵循了上面的所有设置,那么您应该能够打开一个web浏览器并将其指向devpi服务器

http://localhost:3141/myuser/myindex
  1. 使DevPi自动启动

这是不同的。我们使用systemd,所以我创建了一个文件/usr/lib/systemd/system/devpi.service

[Unit]
Requires=network-online.target
After=network-online.target 

[Service]
EnvironmentFile=-/etc/sysconfig/devpi
Type=forking
PIDFile=/var/www/pypi/.xproc/devpi-server/xprocess.PID
Restart=always
ExecStart=/bin/devpi-server  host=0.0.0.0  port 3141  serverdir /var/www/pypi  start
ExecStop=/bin/devpi-server  host=0.0.0.0  port 3141  serverdir /var/www/pypi  stop
User=root 

[Install]
WantedBy=multi-user.target

保存文件并通知systemd。在

systemctl daemon-reload
systemctl enable devpi
  1. 配置客户端

要让客户机的pip使用新的DevPi存储库,请创建一个/etc/pip.conf文件,如下所示

[global]
trusted-host = <server IP or FQDN>

[install]
index-url = http://<server IP or FQDN>:3141/myuser/myindex/+simple/

[search]
index = http://<server IP or FQDN>:3141/myuser/myindex/

相关问题 更多 >