如何透過pip3離線安裝具有所有依賴項的python套件?

如何透過pip3離線安裝具有所有依賴項的python套件?

首先,我設法在無法存取互聯網的伺服器上安裝 Ansible。但我想知道我的做法是否正確。

首先我透過下載了必要的依賴項pip3

pip3 download ansible -d .

這導致下載以下文件:

ansible-2.9.4.tar.gz                          
cryptography-2.8-cp34-abi3-manylinux1_x86_64.whl  
MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl  
PyYAML-5.3.tar.gz
cffi-1.13.2-cp36-cp36m-manylinux1_x86_64.whl  
Jinja2-2.11.1-py2.py3-none-any.whl                
pycparser-2.19.tar.gz                              
six-1.14.0-py2.py3-none-any.whl

現在我已經在遠端電腦上提供了這些文件,我嘗試使用

pip3 install ansible-2.9.4.tar.gz

安裝ansible。

這導致了以下錯誤:

Processing ./ansible-2.9.4.tar.gz
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 
'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 
0x7f00726f9ef0>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /simple/jinja2/

所以我嘗試手動安裝 Jinja2:

pip3 install jinja2-2.11.1-py2.py3-none-any.whl

但這也不起作用:

WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection
 broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 
0x7fd303a23940>: Failed to establish a new connection: [Errno -2] Name or service not known',)': 
/simple/markupsafe/

安裝Markupsafe後,Jinja2也可以安裝。最後pip3 install ansible-2.9.4.tar.gz我成功安裝了ansible。

現在我的問題是。有沒有辦法告訴pip使用下載的檔案來安裝依賴項,或者有沒有更簡單的方法來離線安裝特定的 python 套件及其所有依賴項?

感謝您的幫助和最誠摯的問候。亞伯斯

答案1

有沒有辦法告訴pip使用下載的檔案來安裝依賴項,或者有沒有更簡單的方法來離線安裝特定的 python 套件及其所有依賴項?

我相信您正在尋找的是--無索引--查找連結選項到pip install.根據官方pip install選項文件:

--無索引

忽略包索引(只查看 --find-links URL)。

-f, --查找鏈接

如果是 html 檔案的 url 或路徑,則解析指向檔案的連結。如果本機路徑或 file:// url 是目錄,則在目錄清單中尋找檔案。

透過這些選項,您可以執行以下操作。本地安裝:

pip3 install --no-index --find-links /some/path <package name>

或遠端安裝(例如透過 HTTP):

pip3 install --no-index --find-links http:\\remotes\server <package name>

在您的情況下,您應該能夠簡單地使用ansible套件名稱例如:

pip3 install --no-index --find-links /some/path ansible

pip3 install --no-index --find-links http:\\remotes\server ansible

如果您願意,可以使用完整的檔案名稱:

pip3 install --no-index --find-links /some/path ansible-2.9.4.tar.gz

pip3 install --no-index --find-links http:\\remotes\server ansible-2.9.4.tar.gz

假設所有必需的依賴項都位於同一位置(如原始問題中所列),則應正常安裝它們(即無需手動按順序安裝每個依賴項)。


要求

另一種選擇可能是使用正確的依賴項安裝順序建立需求文件,例如:

前任。要求.txt

/path/to/MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl 
/path/to/Jinja2-2.11.1-py2.py3-none-any.whl 
/path/to/ansible-2.9.4.tar.gz
# ...                          

然後使用egpip3 install -r requirements.txt來安裝列出的軟體包。您也可以再次使用 HTTP 連結:

前任。要求.txt

http:\\remotes\server\MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl 
http:\\remotes\server\Jinja2-2.11.1-py2.py3-none-any.whl 
http:\\remotes\server\ansible-2.9.4.tar.gz
# ... 

這裡明顯的缺點是,假設一個軟體包依賴另一個軟體包,您已經需要知道某些軟體包需要安裝的順序。


其他 URL 選項

您可能還想查看版本控制系統(VCS)部分文檔,其中提供了與 VCS 連結(即 Git、Mercurial、Subversion 和 Bazaar)pip install結合的範例。pip install


參考

點安裝

pip 安裝(選項)

答案2

由於您需要的不是全鏡,我建議使用python-pypi-鏡像:

1- 在具有網際網路連線的伺服器上使用 pip 安裝 python-pypi-mirror。

2-在此伺服器上安裝 http.server python 模組。

3- 建立一個目錄來服務您的 pip 套件。

4- 使用 python-pypi-mirror 將所需的套件下載到最近建立並公開為 http 伺服器的目錄(它將包含其所有依賴項)。

5-遠端安裝所需的軟體包。

 pip3 install --trusted-host <http_server> -i http://<http_server>:<http.server_default_port>/simple <package_name>

您將在這裡找到所有需要的說明

相關內容