如何制作一个没有互联网访问和搜索可用的本地Pypi镜像?

我正在尝试在服务器上创建一个完整的本地Pypi存储库镜像与pip搜索功能,我只能连接外部硬盘驱动器.要明确的是,我不想要一个简单的缓存系统,服务器连接到一个完全封闭的网络中的其他机器,根本无法访问互联网.

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

我也测试了pypiserver.它可能已经完成了我想要的东西,但它的速度太慢,最终导致pip搜索抛出超时(看起来它不是为了处理那么多包而构建的).

最后,我看了看devpi.似乎可以很好地完成我想做的工作,但我正在寻找一种方法将我的bandersnatch转储容易地导入其中.看起来我不能基于本地目录创建索引.

谢谢你的回复.

最佳答案 关于我们如何让DevPi在我们的环境中工作得很好,我不妨提供一个正确的答案:

>安装DevPi

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

pip install -U devpi

(很可能是root)应该做的伎俩.

>确保您的服务器防火墙已打开

DevPi默认使用端口3141.如果你安装了firewall-cmd之类的东西

firewall-cmd --zone=public --add-port=3141/tcp --permanent
firewall-cmd --reload

或系统上的等效命令.

>配置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

>启动它

devpi-server –host = 0.0.0.0 –port = 3141 –serverdir = / var / www / pypi
>尝试并安装包

pip install -i http://localhost:3141/root/pypi/ simplejson

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

此时,如果已成功遵循上述所有设置,您应该能够打开Web浏览器并将其指向devpi服务器

http://localhost:3141/myuser/myindex

>让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

>配置客户端

要指向客户端的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/
点赞