Python默認(rèn)從PyPI存儲(chǔ)庫(kù)下載其依賴項(xiàng)。它包含最新版本(穩(wěn)定或不穩(wěn)定)和各種數(shù)量的軟件包。那么定制私有軟件包存儲(chǔ)庫(kù)的需求是什么?想要知道這個(gè)問(wèn)題的答案,首先來(lái)說(shuō)一下依賴管理:您可以顯式控制軟件包的依賴關(guān)系,而不考慮版本棄用或最新的向后不兼容版本。當(dāng)然,這可以通過(guò)在requirements.txt中定義版本來(lái)完成,但是要確保我們得到的每個(gè)軟件包都像我們期望的那樣,最好使用自定義存儲(chǔ)庫(kù)。
PyPI服務(wù)器棄用TLS v1.1,v1.0
PyPI服務(wù)器已不再支持TLS 1.0 / TLS 1.1版本的設(shè)備以下載軟件包。
“我將看到可能在截止日期之前組織一些預(yù)定的TLSv1.0和TLSv1.1的“掉電”,以嘗試幫助人們找到需要更新的地方。任何計(jì)劃的限電措施將在發(fā)生之前發(fā)布到status.python.org。”
因此,升級(jí)Python:TLS v1.2很快將成為必需,現(xiàn)在它已成為強(qiáng)制性的。具有Ubuntu 12.04或更低版本的設(shè)備具有TLS v1.1,這意味著這些設(shè)備無(wú)法從默認(rèn)python軟件包管理服務(wù)器下載任何python軟件包。通過(guò)在終端中運(yùn)行以下命令來(lái)檢查T(mén)LS版本。
python2 -c "import urllib2,json; print(json.loads(urllib2.urlopen.read())['tls_version'])"
有一些解決方法,例如明確地說(shuō)要從PyPI服務(wù)器下載PIP。
pip install --index-url = scapy
這已經(jīng)工作了一段時(shí)間,然后它也并沒(méi)有起作用。
在這里,我們只有兩個(gè)選項(xiàng),升級(jí)TLS版本或使用自定義存儲(chǔ)庫(kù)。經(jīng)過(guò)一段時(shí)間的升級(jí)后,TLS也變得不可能了,因?yàn)槟枰?jí)openssl和python密碼模塊。無(wú)法升級(jí)python模塊,因此我們陷入了僵局,這是自定義存儲(chǔ)庫(kù)可以拯救的地方。
建立自定義存儲(chǔ)庫(kù)
您需要執(zhí)行以下操作來(lái)創(chuàng)建自己的自定義python存儲(chǔ)庫(kù)。
1. 托管Ubuntu服務(wù)器
2. 帶有TLS v1.2的Python環(huán)境
3. 公共區(qū)域
首先登錄到您的Ubuntu服務(wù)器,然后在require.txt文件中列出所有所需的依賴項(xiàng),如下所示
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
請(qǐng)求== 2.5.3
s3transfer == 0.1.10
scapy == 2.4.0
六個(gè)== 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)境以安裝這些依賴項(xiàng)。
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客戶端可以識(shí)別模塊。為此,我編寫(xiě)了一個(gè)小腳本,在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'
確保已移動(dòng)所有包裝。如果未移動(dòng)任何內(nèi)容,請(qǐng)手動(dòng)創(chuàng)建目錄,然后將tar球移動(dòng)到其中。我們快到了!讓我們托管存儲(chǔ)庫(kù)。
首先安裝托管客戶端
pip install twisted
默認(rèn)情況下,主機(jī)從端口8080啟動(dòng),請(qǐng)確保沒(méi)有其他進(jìn)程擁有它。
lsof -i:8080
使您的終端進(jìn)入py-cache目錄
twistd -n web --path .
您已經(jīng)建立了自己的自定義存儲(chǔ)庫(kù),現(xiàn)在將其托管在Ubuntu服務(wù)器的端口8080中。
通知PIP客戶我們的自定義存儲(chǔ)庫(kù)
在您的客戶中
vim /etc/pip.conf
添加您的自定義存儲(chǔ)庫(kù)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安裝將從您的自定義存儲(chǔ)庫(kù)安裝python軟件包。
點(diǎn)安裝scappy
在這里,您可以完全控制需要提供的依賴性以及需要進(jìn)行身份驗(yàn)證和禁止的客戶端。希望我已經(jīng)與大家分享了有用的信息。
以上就是關(guān)于自定義Python PyPI存儲(chǔ)庫(kù)的全部?jī)?nèi)容,想了解更多關(guān)于Python的信息,請(qǐng)繼續(xù)關(guān)注中培偉業(yè)。