Python默認(rèn)從PyPI存儲庫下載其依賴項。它包含最新版本(穩(wěn)定或不穩(wěn)定)和各種數(shù)量的軟件包。那么定制私有軟件包存儲庫的需求是什么?想要知道這個問題的答案,首先來說一下依賴管理:您可以顯式控制軟件包的依賴關(guān)系,而不考慮版本棄用或最新的向后不兼容版本。當(dāng)然,這可以通過在requirements.txt中定義版本來完成,但是要確保我們得到的每個軟件包都像我們期望的那樣,最好使用自定義存儲庫。
PyPI服務(wù)器棄用TLS v1.1,v1.0
PyPI服務(wù)器已不再支持TLS 1.0 / TLS 1.1版本的設(shè)備以下載軟件包。
“我將看到可能在截止日期之前組織一些預(yù)定的TLSv1.0和TLSv1.1的“掉電”,以嘗試幫助人們找到需要更新的地方。任何計劃的限電措施將在發(fā)生之前發(fā)布到status.python.org。”
因此,升級Python:TLS v1.2很快將成為必需,現(xiàn)在它已成為強(qiáng)制性的。具有Ubuntu 12.04或更低版本的設(shè)備具有TLS v1.1,這意味著這些設(shè)備無法從默認(rèn)python軟件包管理服務(wù)器下載任何python軟件包。通過在終端中運(yùn)行以下命令來檢查TLS版本。
python2 -c "import urllib2,json; print(json.loads(urllib2.urlopen.read())['tls_version'])"
有一些解決方法,例如明確地說要從PyPI服務(wù)器下載PIP。
pip install --index-url = scapy
這已經(jīng)工作了一段時間,然后它也并沒有起作用。
在這里,我們只有兩個選項,升級TLS版本或使用自定義存儲庫。經(jīng)過一段時間的升級后,TLS也變得不可能了,因為您需要升級openssl和python密碼模塊。無法升級python模塊,因此我們陷入了僵局,這是自定義存儲庫可以拯救的地方。
建立自定義存儲庫
您需要執(zhí)行以下操作來創(chuàng)建自己的自定義python存儲庫。
1. 托管Ubuntu服務(wù)器
2. 帶有TLS v1.2的Python環(huán)境
3. 公共區(qū)域
首先登錄到您的Ubuntu服務(wù)器,然后在require.txt文件中列出所有所需的依賴項,如下所示
boto3 == 1.4.4
botocore == 1.5.90
click == 3.1coloredlogs
== 8.0
configobj == 5.0.6
docutils == 0.13.1
futures == 3.1.1
jmespath == 0.9.3
pexpect == 3.1
pyOpenSSL = = 0.15.1
pyasn1 == 0.4.2
pycrypto == 2.6.1
python-dateutil == 2.6.1
請求== 2.5.3
s3transfer == 0.1.10
scapy == 2.4.0
六個== 1.5.2
speedtest- cli == 2.0.0
urllib3 == 1.7.1
virtualenv == 15.2.0
websocket-client == 0.16.0
wheel == 0.24.0
ndg-httpsclient
distribution
pip == 1.5.4
然后創(chuàng)建Python虛擬環(huán)境以安裝這些依賴項。
pip install virtualenv
virtualenv repo
source repo/bin/activate
mkdir /home/batman/py-cache
在虛擬環(huán)境中,現(xiàn)有的pip版本應(yīng)為1.5.4。
pip install -r requirements.txt --no-use-wheel --download="/home/batman/py-cache"
現(xiàn)在,所有軟件包都已下載到您的Ubuntu服務(wù)器中,我們需要將所有軟件包組織在標(biāo)準(zhǔn)目錄結(jié)構(gòu)中,以便PIP客戶端可以識別模塊。為此,我編寫了一個小腳本,在py-cache目錄中運(yùn)行它,它將為您完成工作。
為os.listdir('/ home / batman / py-cache')中的文件名導(dǎo)入os :
嘗試:
package_name = filename.split('。')[0] .split('-')
del package_name [-1]
package_name ='-'。join(map(str,package_name))
打印package_name
os.system('mkdir%s'%package_name)
os.system('mv%s%s /'%(filename,package_name))
除外e:
打印'ERROR:'
打印'e'
確保已移動所有包裝。如果未移動任何內(nèi)容,請手動創(chuàng)建目錄,然后將tar球移動到其中。我們快到了!讓我們托管存儲庫。
首先安裝托管客戶端
pip install twisted
默認(rèn)情況下,主機(jī)從端口8080啟動,請確保沒有其他進(jìn)程擁有它。
lsof -i:8080
使您的終端進(jìn)入py-cache目錄
twistd -n web --path .
您已經(jīng)建立了自己的自定義存儲庫,現(xiàn)在將其托管在Ubuntu服務(wù)器的端口8080中。
通知PIP客戶我們的自定義存儲庫
在您的客戶中
vim /etc/pip.conf
添加您的自定義存儲庫URL
[global]
index-url = http://10.1.10.69:8080
然后導(dǎo)出環(huán)境變量PIP_CONFIG_FILE。
導(dǎo)出PIP_CONFIG_FILE = / etc / pip.conf
而已。現(xiàn)在,通常的如下pip安裝將從您的自定義存儲庫安裝python軟件包。
點(diǎn)安裝scappy
在這里,您可以完全控制需要提供的依賴性以及需要進(jìn)行身份驗證和禁止的客戶端。希望我已經(jīng)與大家分享了有用的信息。
以上就是關(guān)于自定義Python PyPI存儲庫的全部內(nèi)容,想了解更多關(guān)于Python的信息,請繼續(xù)關(guān)注中培偉業(yè)。