pip 離線安裝


離線安裝適用於網絡有問題的環境、inbound 入口被限制等情況。

Wheel 包不適配

Wheel 包的名稱含義

distribution}-{version}(-{build tag})?-{python tag}-{abi tag}-{platform tag}.whl -- 來自 https://www.python.org/dev/peps/pep-0425/#use

例子:greenlet-0.4.12-cp27-cp27m-manylinux1_x86_64.whl,這里省略了 {python tag}

平台不適配

由於默認情況下,wheel 包的平台是運行 pip download 命令 的平台,所以可能出現平台不適配的情況。比如在 MacOS 系統下得到的 pymongo-2.8-cp27-none-macosx_10_10_intel.whl 就不能在 linux_x86_64 安裝。

很自然地,我們會想到去更改 pip download 生成的 wheel 包對應的平台。依照官方的例子

$ pip download \
    --only-binary=:all: \
    --platform linux_x86_64 \
    --python-version 33 \
    --implementation cp \
    --abi cp34m \
    pip>=8
-- 來自 https://pip.pypa.io/en/stable/reference/pip_download/#examples

我們可以正常運行。

但是運用以上命令安裝多個包時,你會發現很多包都找不到。

$ pip download \
>     --only-binary=:all: \
>     --platform linux_x86_64 \
>     --python-version 33 \
>     --implementation cp \
>     --abi cp34m \
>     tornado
Collecting tornado
  Could not find a version that satisfies the requirement tornado (from versions: )
No matching distribution found for tornado

我猜測是對應的項目沒有提供符合條件的二進制包。

Abi tag 不適配

查看 Python 支持的 tag

目標機器

$ python -c "from pip import pep425tags;print(pep425tags.supported_tags)"
[('cp27', 'cp27m', 'manylinux1_x86_64'), ('cp27', 'cp27m', 'linux_x86_64'), ('cp27', 'none', 'manylinux1_x86_64')...]

打包機器

[('cp27', 'cp27mu', 'manylinux1_x86_64'), ('cp27', 'cp27mu', 'linux_x86_64'),

如果在是通過 cp27mu 打出的包,那么在目標機器就不能安裝,因為目標機器沒有 cp27mu。錯誤信息為 package.whl is not a supported wheel on this platform

解決辦法

使用非二進制包安裝。

pip download --no-binary=:all: package_name
# --no-binary=:all: 對於包以及包的依賴包,都不使用二進制
# -- 來自 https://pip.pypa.io/en/stable/reference/pip_download/#cmdoption-no-binary

對於下載下來的 tar.gz 文件,可以直接使用 pip install 安裝。相比 wheel 包,這種包在安裝時會進行編譯,所以花費的時間會長一些。

更進一步

使用上面的解決辦法有兩種情況

  1. 挑出不兼容的包,然后使用下載非二進制包。結果是二進制包和非二進制包混合
  2. 不進行挑選,全部下載非二進制包。由於非二進制包在安裝時要進行編譯,所以安裝時間會更長

最好的情況是提供適配目標機器的二進制包。

  1. 找到與目標機器 Python 環境相同的機器
  2. 下載非二進制包
  3. 在與目標機器相同的環境進行編譯

關於第三點,因為

Build a wheel that’s named such that it’s only usable on the platform that it was built on -- 來自 https://packaging.python.org/tutorials/distributing-packages/#platform-wheels

完整步驟

  1. 安裝 pip2pipip install pip2pi
  2. 使用 pip2pi 下載並打包。pip2pi packages/ --no-use-wheel -r absolute_path_to/requirements.txt
  3. 壓縮 tar zcfv packages.tar.gz packages/
  4. 上傳到目標服務器。
  5. 解壓 tar zxvf packages.tar.gz
  6. (可選,因為我把 virtualenv 也放入了 requirements.txt 中)安裝虛擬環境。pip install --index-url=file://absolute_path_to/packages/simple virtualenv(注意這里的 simple
  7. 創建虛擬環境 virtualenv env
  8. 激活虛擬環境 source env/bin/activate
  9. 安裝剩余依賴。pip install --index-url=file://absolute_path_to/packages/simple -r requirements.txt


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM