首先,我設法在無法存取互聯網的伺服器上安裝 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
參考
答案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>