当前位置: 首页 > 知识库问答 >
问题:

如何使本地Pypi镜像没有互联网接入和搜索可用?

赵修诚
2023-03-14

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

到目前为止,我所做的是用bandersnatch倾倒每个pypi包,我可以在它前面用一个简单的超文本传输协议服务器进行pip安装。我还检索了pypi遗留源代码,并让它在没有任何python包的情况下工作。我现在遇到的问题是将双方联系起来,我甚至不确定这是否可以这样做。

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

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

谢谢你的回复。

共有1个答案

钱德元
2023-03-14

我不妨提供一个适当的答案,说明我们是如何让DevPi在我们的环境中非常好地工作的:

  1. 安装DevPi

DevPi需要Python 3!因此,请确保安装了Python 3版本的pip。利用这一点:

pip install -U devpi

(可能是root)应该可以做到这一点。

默认情况下,DevPi使用端口3141。如果您安装了以下内容

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

或系统上的等效命令。

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安装-ihttp://localhost:3141/root/pypi/辛普莱克森

如果出现问题,请检查日志,在我们的例子中,它们位于/var/www/pypi/。xproc/devpi服务器/xprocess。日志

此时,如果成功地遵循了上述所有设置,您应该能够打开一个web浏览器,并使用

http://localhost:3141/myuser/myindex

这各不相同。我们使用System d,所以我创建了一个文件/usr/lib/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

保存文件并通知system d。

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/
 类似资料:
  • 问题内容: 我们有几个自己的python软件包,并希望使用简单的界面(例如https://pypi.python.org/simple/)为它们创建本地pypi存储库。 由于安全原因,我只想为本地创建一个没有任何镜像的存储库,并将其置于apache的控制之下 该命令外观必须初始化一次,需要进行镜像。 如何基于本地python包生成PyPi简单索引。 还有其他简单的脚本吗? 问题答案: 由于您要求在

  • 我有一个SpringBoot应用程序,它实现了一个Websocket服务器(SockJS)。 我可以在本地网络上将客户端连接到该服务器,只要托管该应用程序的Ubuntu机器可以访问互联网。 2016-10-27 11:22:20.802调试9390---[nio-8085-exec-9]o.a.coyote.http11.org.apache.tomcat.util.net.NioEndpoint

  • pypi 镜像每 5 分钟同步一次。 临时使用 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package 注意,simple 不能少, 是 https 而不是 http 设为默认 升级 pip 到最新的版本 (>=10.0.0) 后进行配置: pip install pip -U pip config set glo

  • 警告 PyPI 源已暂时移除并重定向到 TUNA PyPI,详见 PyPI 镜像变更通知。 地址 https://mirrors.ustc.edu.cn/pypi/ 说明 PyPI(pip) 软件源 注意 使用说明 临时使用 pip install -i https://mirrors.ustc.edu.cn/pypi/web/simple package 设为默认 升级 pip 到最新的版本

  • 我有一个Wifi微控制器ESP8266,它也有一个接入点。我参考了其他谈论以编程方式连接到接入点的博客,并尝试了两种方式 > 使用暴露的标准APIS wifiManager.enable网络(netId, true); wifiManager.save配置(); wifiManager.reconnect(); 使用带有@hide的API Wifi经理。连接(netId、ActionListene

  • 问题内容: 我有一个项目,必须将其部署到无法连接到Internet的客户端Windows系统。我目前在D:\ NODE中有一个文件夹,其中包含node.exe和npm.cmd以及一个node_modules文件夹。为了能够从命令行运行节点,我将D:\ NODE添加到PATH变量中。 我可以将大多数模块本地安装在项目的node_modules内部。但是,只有一个-节点窗口-需要全局安装才能运行。 按