在这首诗中,我将探讨怎样将 PyPI 库房布季夫到 Raspberry Pi 上并提供更多文本,以期让相连的电子设备在没互联网相连的情况下透过 pip install指示加装倚赖包。
最终目标
建立他们的PyPI快照有许多方式,我的方式那时可能将对其它人都适用于。我对那个工程项目的最终目标是:
做那个工程项目的硬体要是可买得起的(<=100英镑)。
在应用程序笔记本电脑上要有极少或没增设明确要求。
我下定决心采用Raspberry Pi 4,用200Gb的SD卡展开储存。用minirepo来布季夫PyPI, pypiserver来提供更多应用软件, nginx来建立逆向全权。
建立邻近地区PyPI伺服器有五个关键步骤:
1、浏览并加装作业控制系统和控制系统辅助工具 2、实用性Raspberry Pi做为两个WiFi领涨板块、DHCP和DNS伺服器 3、布季夫/浏览PyPI应用软件 4、实用性两个互联网伺服器,将浏览的应用软件提供更多给相连的客户。
上面我将详尽说明前述关键步骤。
一、浏览并加装作业控制系统和控制系统程序库
Raspberry Pi是一类较大型网银大小不一的计算机系统,单价最少为35英镑。在那个工程项目中,我采用了Raspberry Pi 4,但其它型号也如果能采用。Raspberry Pi 3和4机型有内建的WiFi转接器,这使将Raspberry Pi增设为WiFi领涨板块或路由器的组织工作比采用内部有线转接器时更单纯。
要开始采用,请浏览并加装Raspbian。Raspbian是两个基于Debian的轻量级作业控制系统,为Raspberry Pi展开了优化。为了做为路由器组织工作,Raspberry Pi将需要加装路由器软件,以及为相连电子设备提供更多互联网地址的DHCP伺服器软件。
接下来,在实用性Raspberry Pi之前,浏览所有你需要的程序库和应用软件。
你需要以下应用软件:
dnsmasq – DNS和DHCP伺服器软件 hostapd – 路由器软件 minirepo – 用于布季夫PyPI,供离线采用。pypiserver – 从布季夫的PyPI包中建立两个索引 nginx – 两个互联网伺服器
要加装这些软件包,请运行这两条指示:
$ sudo apt install dnsmasq hostapd nginx $ pip install minirepo pypiserver
二、实用性Raspberry Pi的WiFi领涨板块、DHCP和DNS
这一步的最终目标是实用性两个独立的互联网做为伺服器,所以Raspberry Pi需要有两个分配给有线端口的静态IP地址。为了实用性静态IP,编辑dhcpcd实用性文件。
$ sudo nano/etc/dhcpcd.conf
添加以下文本:
实用性DHCP
dnsmasq增设中的许多默认增设都是不必要的。建立两个新的实用性文件:
$ sudo mv/etc/dnsmasq.conf/etc/dnsmasq.conf.orig $ sudo nano/etc/dnsmasq.conf
添加以下实用性:
这为透过有线接口 wlan0相连的顾客增设了DHCP。第二行告诉DHCP伺服器(dnsmasq)监听来自你在上一步增设的静态IP的相连。下一行告诉DHCP提供更多IP地址192.168.4.2至 192.168.4.30,租用时间为24小时。
建立两个路由器
接下来,实用性路由器软件(hostapd):
$ sudo nano/etc/hostapd/hostapd.conf
添加以下文本:
在写有 sssid和 wpa_passphrase的地方添加你他们的互联网名称和互联网密码。
告诉控制系统在哪里能找到那个文件,打开hostapd的实用性文件。
sudo nano/etc/default/hostapd
找到带有 #DAEMON_CONF的那一行,并把它替换成这样:
DAEMON_CONF=“/etc/hostapd/hostapd.conf”
添加路由和伪装
编辑 /etc/sysctl.conf并取消对这一行的注释。
net.ipv4.ip_forward=1
为 eth0的出站流量添加两个掩码。sudo iptables–t nat–A POSTROUTING–o eth0–j MASQUERADE
保存新的规则: sudo sh–c“iptables-save > /etc/iptables.ipv4.nat”
编辑 /etc/rc.local,在 “exit 0 “上面添加以下文本,以期在启动时加装这些规则。
iptables–restore</etc/iptables.ipv4.nat
如果你下定决心以后共享互联网相连或在Raspberry Pi上增设两个网桥,这一点很重要。
Raspberry Pi如果已经准备好做为两个路由器组织工作了。如果你直接相连到它,那时是启用SSH的好时机。重新启动Raspberry Pi,测试是否一切正常。
采用两个不同的支持WiFi的电子设备,如手机或笔记本笔记本电脑,扫描新的有线互联网。如果一切都很顺利,你如果看到你上面建立的WiFi互联网。尝试相连到它。
三、布季夫PyPI
在本节中,你将看到怎样布季夫PyPI并实用性以下应用软件。
minirepo pypiserver nginx
Minirepo
Minirepo是两个指示行程序,从PyPI.org浏览应用软件,这样你就能在没互联网的情况下采用pip。加装它的最单纯方式是采用pip。
$ pip install minirepo
第一次执行时, minirepo会问你邻近地区库房的路径(它如果把浏览的应用软件保存到哪里),在Linux中默认为~/minirepo。两个 JSON 实用性文件被建立并保存为 ~/.minirepo,你能根据他们的喜好展开编辑。
有许多布季夫PyPI的替代方案,但我采用了minirepo,因为它允许你有选择地浏览两个快照,例如,只浏览Python 3的所有源代码。在写这首诗的时候,整个PyPI资源库大约有1TB,但透过采用选择性浏览,我能够把它降低到120GB左右。以下是我在那个工程项目中采用的实用性。
上面的实用性浏览了Python 3的源代码,并将包的类型限制为sdist、 bdist_wheel和 bdist_egg包。采用这种方式的缺点是,一些不符合过滤条件的应用软件将不会被浏览。
布季夫PyPI需要很长的时间,所以你要让它在后台运行。
Pypiserver
在这一点上,你如果把PyPI快照到你的笔记本电脑上。我的邻近地区PyPI快照有200000多个应用软件。在我们展开下一步之前,有必要了解什么是 pip以及它是怎样组织工作的。
Pip是最流行的加装Python应用软件的辅助工具,也是现代版本的Python所包含的辅助工具。它提供更多了从PyPI和其它Python应用软件索引中查找、浏览和加装应用软件的基本核心功能,并且能透过其指示行接口(CLI)纳入广泛的开发组织工作流程。
Pip支持从以下地方加装应用软件。
采用需求指定器从PyPI(和其它索引)加装应用软件。
VCS工程项目的URL。
邻近地区工程项目目录
邻近地区或远程源文件
由于你已经布季夫了PyPi应用软件到邻近地区库房,pip能直接从你刚刚浏览的邻近地区PyPI快照中加装这些应用软件。不过这不是本文的目的。这里的最终目标是允许远程应用程序相连到Raspberry Pi并透过互联网浏览应用软件。这就是pypiserver的作用。
pypiserver,将提供更多邻近地区应用软件索引,允许pip透过互联网找到你的软件库房中的应用软件。
首先,测试一下它是否有效。
$ pypi–server–p8080~/minirepo&# Will listen to all IPs.
注意,在运行时,运行它的指示是 pypi–server而不是 pypyserver。
在这里,你要启动 pypiserver 并在 8080 端口运行它。它将找到 minirepo文件夹中的应用软件。那个进程将一直在后台运行,直到你杀死它或关闭Raspberry Pi。我稍后会告诉你怎样启动它。
如果你在浏览器中访问你为Raspberry Pi增设的8080端口的静态IP,你如果看到两个与下面类似的信息。
你那时能从邻近地区软件库加装。
pip install—index–url http://localhost:8080/simple/
或者,从顾客笔记本电脑上加装。
pip install—index–url http://192.168.4.1:8080/
如果你在两个没HTTPS的远程URL上加装了 pypiserver,你会收到pip发出的 “不受信任 “的警告,敦促你添加–受信任的主机选项。
pip—trusted–host192.168.4.1install—index–url http://192.168.4.1:8080/
还有两个更短的方式。pip—trusted–host192.168.4.1install–i http://192.168.4.1:8080/
总是在指示行上指定邻近地区的pypi URL和受信任的主机标志会很麻烦。如果你想总是从你他们的快照中加装应用软件,在你的主目录或虚拟环境中建立那个pip 实用性文件。
主目录:
在Unix和macOS上,主目录文件是: $HOME/.pip/pip.conf
在Windows中,该文件是: %HOME%\pip\pip.ini
在虚拟环境中:
在Unix和macOS中,文件是 $VIRTUAL_ENV/pip.conf
在Windows上,该文件是: %VIRTUAL_ENV%\pip.ini
我建议把那个实用性文件放在虚拟环境中。
四、增设两个互联网伺服器来传递包裹
默认情况下, pypiserver在每次传入的HTTP请求发生时都会扫描整个应用软件目录。当像我们在那个例子中提供更多大量的应用软件时,这可能将会导致显著的速度下降。
两个更快地提供更多文件的方式是把pypiserver放在两个逆向全权后面,并启用你的互联网伺服器的内建缓存功能。在这首诗中,我将采用nginx,但你能自由地采用任何你喜欢的互联网伺服器。
在nginx中增设两个新的虚拟主机
建立两个文件 /etc/nginx/sites–available/cheeshop.com。为了本文的目的,我将新的虚拟主机称为cheeshop.com。
运行 $ sudo nano/etc/nginx/sites–available/cheeshop.com并添加以下文本。
实用性的第一部分指示 nginx 建立两个 10GB 的缓存,该缓存将保持活动状态 2 小时。上游 pypi 部分负责从运行在端口 8080 上的pypiserver提供更多文本。CheeseShop 是 Python Package Index 的秘密代号,这就是我将伺服器命名为那个的原因。您能采用任何您喜欢的名称或 IP 地址。
伺服器部分指定端口 80 将用于传入的 HTTP 相连,并将这些请求转发到 pypi 伺服器。
我不拥有 cheeseshop.com 域名,但我能采用它,因为我们正在建立两个无法访问 Internet 的独立互联网。为了让应用程序计算机系统能够相连到 cheeseshop.com,您需要告诉 DNS 伺服器怎样解析它。稍后会详尽介绍。
要启用那个新的虚拟主机,您需要建立两个指向您刚刚在 /etc/nginx/sites–enabled/ 文件夹中建立的实用性文件的符号链接:
$ sudo ln–s/etc/nginx/sites–available/cheeseshop.com/etc/nginx–sites–enabled/
这样做将启用新的虚拟主机。透过运行检查一切正常 sudo nginx–t.如果一切顺利,那就太好了!接下来,要对 DNS 展开小的更改以将 cheeseshop.com 域映射到 IP 地址。
打开 /etc/hosts并为新建立的 cheeseshop.com 域添加两个条目:
主机文件包含域到 IP 地址的映射,可帮助计算机系统为您提供更多正确的文本。Dnsmasq 将在启动时检查此文件,因此最好重新启动它:
sudo service dnsmasq restart
也重新启动 nginx 以取得良好的效果:
sudo service nginx restart
假设一切顺利,您如果能够采用主机名从应用程序计算机系统加装 Python 包,而不是那时采用 IP。
采用伺服器
要对此展开测试,请相连到 Raspberry Pi 的 WiFi 互联网并在应用程序计算机系统上建立两个新的虚拟环境并在虚拟环境中运行以下指示:
pip—trusted–host cheeseshop.com加装-i http://cheeseshop.com django
运行该指示会产生以下输出:
启动时启动 pypiserver(可选)
为确保pypiserver 软件在开机时自动启动,建立两个新的Linux 服务并采用 systemd 对其展开管理。
1、建立服务将管理的启动脚本,将其命名为 start–pypi–server.sh。向其中添加以下文本:
2、将脚本复制到/usr/bin 并使其可执行:sudo cp start–pypi–server.sh/usr/bin/start–pypi–server.sh sudo chmod+x/usr/bin/start–pypi–server.sh
3、建立两个单元文件来定义两个systemd服务。将其命名为 pypiserver.service:
这定义了两个基本服务。ExecStart 指令指定将运行以启动服务的指示。
4、将单元文件复制到 /etc/systemd/system并赋予权限:sudo cp pypiserver.service/etc/systemd/system/pypiserver.service
sudo chmod644/etc/systemd/system/pypiserver.service
启动并启用服务
1、建立单元文件后,您能测试服务:
sudo systemctl start pypiserver
2、查看pypiserver服务状态:
sudo systemctl status pypiserver
这将产生类似这样的输出:
3、停止或重启服务:sudo systemctl stop pypiserver sudo systemctl restart pypiserver
4、最后,采用 enable指示确保服务在控制系统启动时启动:
sudo systemctl enable pypiserver
结论
我们已经了解了怎样在 Raspberry Pi 上建立他们的邻近地区 PyPI 布季夫。你学会了怎样
将 Raspberry Pi 增设为路由器
将 Raspberry Pi 增设为 DHCP 和 DNS 伺服器
布季夫 PyPi
采用互联网伺服器提供更多布季夫的包。
我这样做是为了证明能离线运行类似 PyPI 的概念。我确信有更好或更有效的方式能做到这一点。如有任何建议或批评,请在下方发表评论。谢谢阅读。
社区会员 –