我试图在服务器上创建一个完整的本地Pypi存储库镜像和pip搜索功能我只能连接外部硬盘驱动器。为了清楚起见,我不想要一个简单的缓存系统,服务器连接到一个完全封闭的网络中的其他机器,根本无法访问互联网。
到目前为止我所做的是使用bandersnatch转储每个pypi包,我可以在它前面使用一个简单的http服务器进行pip安装。我还检索了pypi遗留源代码,并在没有任何python包的情况下使用它。我现在遇到的问题是连接双方,我甚至不确定这可以这样做。
我还测试了pypiserver。它可能已经完成了我想要的东西,但它的速度太慢,最终导致pip搜索抛出超时(看起来它没有被构建来处理那么多的包)。
最后,我看了看devpi。似乎可以很好地完成我想做的工作,但我正在寻找一种方法将我的bandersnatch转储轻松导入其中。看起来我不能基于本地目录创建索引。
感谢您的回复。
答案 0 :(得分:2)
关于我们如何让DevPi
在我们的环境中工作得很好,我不妨提供一个正确的答案:
DevPi
需要Python 3!因此,请确保安装了{3}的Python 3版本。使用它:
pip
(可能是root)应该做的。
pip install -U devpi
默认使用端口3141。如果您DevPi
安装了类似
firewall-cmd
或系统上的等效命令。
firewall-cmd --zone=public --add-port=3141/tcp --permanent
firewall-cmd --reload
DevPi
将开箱即用DevPi
。我们还希望能够覆盖"覆盖"我们自己的包只在内部提供组织。对于本地nabCERT包,需要内部索引。好的,因为这个本身可以使用PyPi作为后备!
选择要使用的devpi服务器 - 您可能正在使用的服务器
PyPi
现在创建一个可以添加和管理内部包并使用它们登录的用户
devpi use http://localhost:3141
现在创建我们的内部索引来保存本地包,同时确保它将使用PyPi作为"后备"
devpi user -c myuser password=mypassword
devpi login myuser --password mypassword
启动
devpi-server --host = 0.0.0.0 --port = 3141 --serverdir = / var / www / pypi
尝试并安装软件包
pip install -i http://localhost:3141/root/pypi/ simplejson
如果出现问题,请检查日志,我们的情况是devpi index -c myindex bases=/root/pypi volatile=True
此时,如果已成功遵循上述所有设置,您应该能够打开网络浏览器并将其指向/var/www/pypi/.xproc/devpi-server/xprocess.log
服务器
devpi
这有所不同。我们使用http://localhost:3141/myuser/myindex
,因此我创建了一个文件/ systemd
usr/lib/systemd/system/devpi.service
保存文件并通知systemd。
[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
指出你的客户' systemctl daemon-reload
systemctl enable devpi
使用新的pip
存储库创建一个DevPi
文件,其中包含类似的内容
/etc/pip.conf