Python 如何使本地Pypi镜像无需internet访问,且具有可用的搜索功能?
我正在尝试在只能连接外部硬盘的服务器上制作一个带有pip搜索功能的完整本地Pypi存储库镜像。要明确的是,我不想要一个简单的缓存系统,服务器在一个完全封闭的网络中连接到其他机器,根本无法访问互联网 到目前为止,我所做的是用bandersnatch转储每个pypi包,我可以用它前面的一个简单http服务器进行pip安装。我还检索了pypi遗留源代码,使其在没有任何python包的情况下工作。我现在遇到的问题是将双方联系起来,我甚至不确定这样做是否可行 我还测试了pypiserver。它本可以完成我想要的,但速度太慢,最终导致pip搜索超时(看起来它不是为处理那么多包而构建的) 最后,我看了一下devpi。似乎做的很好,我想做的,但我正在寻找一种方法,导入我的bandersnatch转储到它容易。看起来我无法基于本地目录创建索引Python 如何使本地Pypi镜像无需internet访问,且具有可用的搜索功能?,python,pip,pypi,devpi,pypiserver,Python,Pip,Pypi,Devpi,Pypiserver,我正在尝试在只能连接外部硬盘的服务器上制作一个带有pip搜索功能的完整本地Pypi存储库镜像。要明确的是,我不想要一个简单的缓存系统,服务器在一个完全封闭的网络中连接到其他机器,根本无法访问互联网 到目前为止,我所做的是用bandersnatch转储每个pypi包,我可以用它前面的一个简单http服务器进行pip安装。我还检索了pypi遗留源代码,使其在没有任何python包的情况下工作。我现在遇到的问题是将双方联系起来,我甚至不确定这样做是否可行 我还测试了pypiserver。它本可以完成我
感谢您的回复。我不妨提供一个适当的答案,说明我们是如何让
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作为“后备方案”
/var/www/pypi/.xproc/devpi server/xproces.log
此时,如果成功地遵循了上述所有设置,您应该能够打开一个web浏览器,并使用
http://localhost:3141/myuser/myindex
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/
[全球]
受信任主机=
[安装]
索引url=http://:3141/myuser/myindex/+simple/
[搜寻]
index=http://:3141/myuser/myindex/
当我在关注同一个问题时,这个问题的时间安排得非常好:pip客户端将无法访问互联网,需要一个完整的PyPi镜像,从Bandersnatch开始,在我注意到它实际上只做缓存之前,看到devpi勾选了所有的框,现在正试图找出如何通过叠加devpi的索引来挽救我的大量bandersnatch下载@我刚下载完Bandersnatch的大量垃圾。你是说这是在浪费时间、精力和带宽吗?@ArjunJRao好吧,我只能回答:Bandersnatch做了你想做的一切吗?那我想这对你很有用。根据我的评论时间戳,我们已经使用devpi一年了,它非常棒!只有从远程缓存我们真正需要的东西,而不是整个PyPi归档,我们可以无缝地添加我们自己的包存储库,它有一些很好的管理工具来索引和清理存储库。
[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/