6

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

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

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

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

感谢您的任何回复。

4

1 回答 1

5

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

  1. 安装 DevPi

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

pip install -U devpi

(可能以root身份)应该可以解决问题。

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

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

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

或系统上的等效命令。

  1. 配置DevPi

DevPiPyPi开箱即用。我们还希望能够“覆盖”我们自己的包,这些包仅在组织内部提供。对于本地 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 --port=3141 --serverdir=/var/www/pypi

  2. 尝试安装一个包

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

如果出现问题,请检查日志,在我们的例子中,它们在/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/
于 2017-06-29T07:06:16.670 回答