創(chuàng)建自己的PyPI鏡像有很多方法,我的方法現(xiàn)在可能對(duì)所有人都適用,。我對(duì)這個(gè)項(xiàng)目的目標(biāo)是:
我決定使用Raspberry Pi 4,,用200Gb的SD卡進(jìn)行存儲(chǔ),。用 創(chuàng)建本地PyPI服務(wù)器有四個(gè)步驟: 1、下載并安裝操作系統(tǒng)和系統(tǒng)工具 2,、配置Raspberry Pi作為一個(gè)WiFi熱點(diǎn),、DHCP和DNS服務(wù)器 3、克隆/下載PyPI軟件包 4,、配置一個(gè)網(wǎng)絡(luò)服務(wù)器,,將下載的軟件包提供給連接的客戶。 下面我將詳細(xì)解釋上述步驟,。 一,、下載并安裝操作系統(tǒng)和系統(tǒng)實(shí)用程序 Raspberry Pi是一種小型信用卡大小的計(jì)算機(jī),售價(jià)至少為35美元,。在這個(gè)項(xiàng)目中,,我使用了Raspberry Pi 4,但其他型號(hào)也應(yīng)該可以使用,。Raspberry Pi 3和4型號(hào)有內(nèi)置的WiFi適配器,,這使得將Raspberry Pi設(shè)置為WiFi熱點(diǎn)或接入點(diǎn)的工作比使用外部無線適配器時(shí)更簡單。 要開始使用,,請(qǐng)下載并安裝Raspbian,。Raspbian是一個(gè)基于Debian的輕量級(jí)操作系統(tǒng),為Raspberry Pi進(jìn)行了優(yōu)化,。為了作為接入點(diǎn)工作,,Raspberry Pi將需要安裝接入點(diǎn)軟件,以及為連接設(shè)備提供網(wǎng)絡(luò)地址的DHCP服務(wù)器軟件,。 接下來,,在配置Raspberry Pi之前,,下載所有你需要的實(shí)用程序和軟件包。 你需要以下軟件包: dnsmasq - DNS和DHCP服務(wù)器軟件 hostapd - 接入點(diǎn)軟件 minirepo - 用于克隆PyPI,,供離線使用,。pypiserver - 從克隆的PyPI包中創(chuàng)建一個(gè)索引 nginx - 一個(gè)網(wǎng)絡(luò)服務(wù)器 要安裝這些軟件包,請(qǐng)運(yùn)行這兩條命令:
二,、配置Raspberry Pi的WiFi熱點(diǎn),、DHCP和DNS 這一步的目標(biāo)是配置一個(gè)獨(dú)立的網(wǎng)絡(luò)作為服務(wù)器,所以Raspberry Pi需要有一個(gè)分配給無線端口的靜態(tài)IP地址,。為了配置靜態(tài)IP,,編輯dhcpcd配置文件。
添加以下內(nèi)容: 配置DHCP dnsmasq設(shè)置中的很多默認(rèn)設(shè)置都是不必要的,。創(chuàng)建一個(gè)新的配置文件:
添加以下配置: 這為通過無線接口 創(chuàng)建一個(gè)接入點(diǎn) 接下來,配置接入點(diǎn)軟件(hostapd):
添加以下內(nèi)容: 在寫有 告訴系統(tǒng)在哪里可以找到這個(gè)文件,,打開
找到帶有
添加路由和偽裝 編輯
為 保存新的規(guī)則: 編輯
如果你決定以后共享互聯(lián)網(wǎng)連接或在Raspberry Pi上設(shè)置一個(gè)網(wǎng)橋,,這一點(diǎn)很重要,。 Raspberry Pi應(yīng)該已經(jīng)準(zhǔn)備好作為一個(gè)接入點(diǎn)工作了。如果你直接連接到它,,現(xiàn)在是啟用SSH的好時(shí)機(jī),。重新啟動(dòng)Raspberry Pi,測(cè)試是否一切正常,。 使用一個(gè)不同的支持WiFi的設(shè)備,,如手機(jī)或筆記本電腦,掃描新的無線網(wǎng)絡(luò),。如果一切都很順利,,你應(yīng)該看到你上面創(chuàng)建的WiFi網(wǎng)絡(luò)。嘗試連接到它。 三,、克隆PyPI 在本節(jié)中,,你將看到如何克隆PyPI并配置以下軟件包。 minirepo pypiserver nginx Minirepo Minirepo是一個(gè)命令行程序,,從PyPI.org下載軟件包,這樣你就可以在沒有互聯(lián)網(wǎng)的情況下使用pip,。安裝它的最簡單方法是使用pip,。
第一次執(zhí)行時(shí), 有許多克隆PyPI的替代方案,,但我使用了minirepo,因?yàn)樗试S你有選擇地下載一個(gè)鏡像,,例如,,只下載Python 3的所有源代碼。在寫這篇文章的時(shí)候,,整個(gè)PyPI資源庫大約有1TB,,但通過使用選擇性下載,我能夠把它降低到120GB左右,。以下是我在這個(gè)項(xiàng)目中使用的配置,。 上面的配置下載了Python 3的源代碼,并將包的類型限制為 克隆PyPI需要很長的時(shí)間,,所以你要讓它在后臺(tái)運(yùn)行。 Pypiserver 在這一點(diǎn)上,,你應(yīng)該把PyPI鏡像到你的電腦上,。我的本地PyPI鏡像有200000多個(gè)軟件包。在我們進(jìn)行下一步之前,,有必要了解什么是
由于你已經(jīng)克隆了PyPi軟件包到本地倉庫,,pip可以直接從你剛剛下載的本地PyPI鏡像中安裝這些軟件包,。不過這不是本文的目的,。這里的目標(biāo)是允許遠(yuǎn)程客戶端連接到Raspberry Pi并通過網(wǎng)絡(luò)下載軟件包。這就是pypiserver的作用,。 pypiserver,,將提供本地軟件包索引,允許pip通過網(wǎng)絡(luò)找到你的軟件倉庫中的軟件包,。 首先,,測(cè)試一下它是否有效。
注意,,在運(yùn)行時(shí),運(yùn)行它的命令是 在這里,,你要啟動(dòng) 如果你在瀏覽器中訪問你為Raspberry Pi設(shè)置的8080端口的靜態(tài)IP,,你應(yīng)該看到一個(gè)與下面類似的信息,。 你現(xiàn)在可以從本地軟件庫安裝。
或者,,從客戶電腦上安裝。
如果你在一個(gè)沒有HTTPS的遠(yuǎn)程URL上安裝了
還有一個(gè)更短的方法。 總是在命令行上指定本地的pypi URL和受信任的主機(jī)標(biāo)志會(huì)很麻煩。如果你想總是從你自己的鏡像中安裝軟件包,,在你的主目錄或虛擬環(huán)境中創(chuàng)建這個(gè) 主目錄:
在虛擬環(huán)境中:
我建議把這個(gè)配置文件放在虛擬環(huán)境中,。 四,、設(shè)置一個(gè)網(wǎng)絡(luò)服務(wù)器來傳遞包裹 默認(rèn)情況下,, 一個(gè)更快地提供文件的方法是把 在nginx中設(shè)置一個(gè)新的虛擬主機(jī) 創(chuàng)建一個(gè)文件 運(yùn)行 配置的第一部分指示 nginx 創(chuàng)建一個(gè) 10GB 的緩存,,該緩存將保持活動(dòng)狀態(tài) 2 小時(shí),。上游 pypi 部分負(fù)責(zé)從運(yùn)行在端口 8080 上的 服務(wù)器部分指定端口 80 將用于傳入的 HTTP 連接,,并將這些請(qǐng)求轉(zhuǎn)發(fā)到 pypi 服務(wù)器,。 我不擁有 cheeseshop.com 域名,,但我可以使用它,因?yàn)槲覀冋趧?chuàng)建一個(gè)無法訪問 Internet 的獨(dú)立網(wǎng)絡(luò),。為了讓客戶端計(jì)算機(jī)能夠連接到 cheeseshop.com,您需要告訴 DNS 服務(wù)器如何解析它,。稍后會(huì)詳細(xì)介紹,。 要啟用這個(gè)新的虛擬主機(jī),您需要?jiǎng)?chuàng)建一個(gè)指向您剛剛在
這樣做將啟用新的虛擬主機(jī)。通過運(yùn)行檢查一切正常 打開 主機(jī)文件包含域到 IP 地址的映射,,可幫助計(jì)算機(jī)為您提供正確的內(nèi)容,。Dnsmasq 將在啟動(dòng)時(shí)檢查此文件,因此最好重新啟動(dòng)它:
也重新啟動(dòng) nginx 以取得良好的效果:
假設(shè)一切順利,您應(yīng)該能夠使用主機(jī)名從客戶端計(jì)算機(jī)安裝 Python 包,,而不是現(xiàn)在使用 IP。 使用服務(wù)器 要對(duì)此進(jìn)行測(cè)試,,請(qǐng)連接到 Raspberry Pi 的 WiFi 網(wǎng)絡(luò)并在客戶端計(jì)算機(jī)上創(chuàng)建一個(gè)新的虛擬環(huán)境并在虛擬環(huán)境中運(yùn)行以下命令:
運(yùn)行該命令會(huì)產(chǎn)生以下輸出: 啟動(dòng)時(shí)啟動(dòng) pypiserver(可選) 為確保pypiserver 軟件在開機(jī)時(shí)自動(dòng)啟動(dòng),創(chuàng)建一個(gè)新的Linux 服務(wù)并使用 1、創(chuàng)建服務(wù)將管理的啟動(dòng)腳本,,將其命名為 2,、將腳本復(fù)制到/usr/bin 并使其可執(zhí)行: 3,、創(chuàng)建一個(gè)單元文件來定義一個(gè)systemd服務(wù)。將其命名為 這定義了一個(gè)基本服務(wù)。 4,、將單元文件復(fù)制到
啟動(dòng)并啟用服務(wù) 1、創(chuàng)建單元文件后,,您可以測(cè)試服務(wù):
2,、查看pypiserver服務(wù)狀態(tài):
這將產(chǎn)生類似這樣的輸出: 3,、停止或重啟服務(wù): 4、最后,,使用
結(jié)論 我們已經(jīng)了解了如何在 Raspberry Pi 上創(chuàng)建自己的本地 PyPI 克隆,。你學(xué)會(huì)了如何
我這樣做是為了證明可以離線運(yùn)行類似 PyPI 的概念,。我確信有更好或更有效的方法可以做到這一點(diǎn),。如有任何建議或批評(píng),請(qǐng)?jiān)谙路桨l(fā)表評(píng)論,。謝謝閱讀。 |
|