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