簡體   English   中英

如何離線安裝包?

[英]How to install packages offline?

從 pypi 下載 python 包及其依賴項以在另一台機器上離線安裝的最佳方法是什么? 使用 pip 或 easy_install 有什么簡單的方法嗎? 我正在嘗試在未連接到 Internet 的 FreeBSD 機器上安裝請求庫。

在可以訪問互聯網的系統上

pip download命令讓您無需安裝即可下載軟件包:

pip download -r requirements.txt

(在以前的 pip 版本中,拼寫為pip install --download -r requirements.txt 。)

在無法訪問互聯網的系統上

然后你可以使用

pip install --no-index --find-links /path/to/download/dir/ -r requirements.txt

安裝那些下載的模塊,無需訪問網絡。

如果要離線安裝 python 庫及其依賴項,請在安裝了相同操作系統、網絡連接和 python 的機器上完成以下步驟:

1) 創建一個包含類似內容的requirements.txt文件(注意 - 這些是您要下載的庫):

Flask==0.12
requests>=2.7.0
scikit-learn==0.19.1
numpy==1.14.3
pandas==0.22.0

創建需求文件的一種選擇是使用pip freeze > requirements.txt 這將列出您環境中的所有庫。 然后你可以進入requirements.txt並刪除不需要的。

2) 執行命令mkdir wheelhouse && pip download -r requirements.txt -d wheelhouse將庫及其依賴項下載到目錄wheelhouse

3) 將 requirements.txt 復制到wheelhouse目錄中

4) 使用tar -zcf wheelhouse.tar.gz wheelhouse存檔到wheelhouse.tar.gz

然后將wheelhouse.tar.gz上傳到您的目標機器:

1) 執行tar -zxf wheelhouse.tar.gz解壓文件

2) 執行pip install -r wheelhouse/requirements.txt --no-index --find-links wheelhouse安裝庫及其依賴項

如果包在 PYPI 上,請將其及其依賴項下載到某個本地目錄。 例如

$ mkdir /pypi && cd /pypi
$ ls -la
  -rw-r--r--   1 pavel  staff   237954 Apr 19 11:31 Flask-WTF-0.6.tar.gz
  -rw-r--r--   1 pavel  staff   389741 Feb 22 17:10 Jinja2-2.6.tar.gz
  -rw-r--r--   1 pavel  staff    70305 Apr 11 00:28 MySQL-python-1.2.3.tar.gz
  -rw-r--r--   1 pavel  staff  2597214 Apr 10 18:26 SQLAlchemy-0.7.6.tar.gz
  -rw-r--r--   1 pavel  staff  1108056 Feb 22 17:10 Werkzeug-0.8.2.tar.gz
  -rw-r--r--   1 pavel  staff   488207 Apr 10 18:26 boto-2.3.0.tar.gz
  -rw-r--r--   1 pavel  staff   490192 Apr 16 12:00 flask-0.9-dev-2a6c80a.tar.gz

某些包可能必須手動歸檔到外觀相似的 tarball 中。 當我想要更新(不太穩定)版本的東西時,我經常這樣做。 有些包不在 PYPI 上,所以同樣適用於它們。

假設您在~/src/myapp中有一個格式正確的 Python 應用程序。 ~/src/myapp/setup.py將具有install_requires列表,其中提到您在/pypi目錄中擁有的一項或多項內容。 像這樣:

  install_requires=[
    'boto',
    'Flask',
    'Werkzeug',
    # and so on

如果您希望能夠運行具有所有必要依賴項的應用程序,同時仍然對其進行破解,您將執行以下操作:

$ cd ~/src/myapp
$ python setup.py develop --always-unzip --allow-hosts=None --find-links=/pypi

這樣,您的應用程序將直接從您的源目錄執行。 你可以破解一些東西,然后重新運行應用程序而不重建任何東西。

如果您想將您的應用程序及其依賴項安裝到當前的 python 環境中,您將執行以下操作:

$ cd ~/src/myapp
$ easy_install --always-unzip --allow-hosts=None --find-links=/pypi .

在這兩種情況下,如果/pypi目錄中不存在一個或多個依賴項,則構建將失敗。 它不會試圖亂七八糟地安裝 Internet 上丟失的東西。

我強烈建議在活動的虛擬環境中調用setup.py develop ...easy_install ...以避免污染您的全局 Python 環境。 這是(virtualenv 就是)幾乎要走的路。 永遠不要在全局 Python 環境中安裝任何東西。

如果您構建應用程序的機器與您要在其上部署它的機器具有相同的體系結構,您可以簡單地將您easy_install的所有內容的整個虛擬環境目錄壓縮到其中。 不過,在打包之前,您必須使虛擬環境目錄可重定位(請參閱--relocatable選項)。 注意:目標機器需要安裝相同版本的 Python,並且您的應用程序可能具有的任何基於 C 的依賴項也必須預先安裝在那里(例如,如果您依賴PIL ,則必須預先安裝 libpng、libjpeg 等) .

讓我一步一步地完成這個過程:

  1. 在連接到 Internet 的計算機上,創建一個文件夾。
   $ mkdir packages
   $ cd packages
  1. 打開命令提示符或 shell 並執行以下命令:

    假設你想要的包是tensorflow

    $ pip download tensorflow

  2. 現在,在目標計算機上,復制packages文件夾並應用以下命令

  $ cd packages
  $ pip install 'tensorflow-xyz.whl' --no-index --find-links '.'

請注意, tensorflow-xyz.whl必須替換為所需包的原始名稱。

離線蟒蛇。 為此,我使用 virtualenv(隔離 Python 環境)

1)使用pip在線安裝virtualenv:

pip install virtualenv --user

或使用 whl 離線:轉到此鏈接,下載最新版本(.whl 或 tar.gz)並使用以下命令安裝:

pip install virtualenv-15.1.0-py2.py3-none-any.whl --user

通過使用--user你不需要使用sudo pip…

2)使用虛擬環境

在在線機器上選擇帶有終端cd的目錄並運行以下代碼:

python -m virtualenv myenv
cd myenv
source bin/activate
pip install Flask

安裝完所有包后,你必須生成一個requirements.txt所以當你的 virtualenv 處於活動狀態時,寫

pip freeze > requirements.txt

打開一個新終端並創建另一個環境,例如myenv2

python -m virtualenv myenv2
cd myenv2
source bin/activate
cd -
ls

現在您可以轉到您的requirements.txttranferred_packages文件夾所在的離線文件夾。 使用以下代碼下載軟件包並將它們全部放入tranferred_packages文件夾。

pip download -r requirements.txt

將您的脫機文件夾帶到脫機計算機,然后

python -m virtualenv myenv2
cd myenv2
source bin/activate
cd -
cd offline
pip install --no-index --find-links="./tranferred_packages" -r requirements.txt

離線文件夾中有什么 [requirements.txt, tranferred_pa​​ckages {Flask-0.10.1.tar.gz, ...}]

檢查您的包裹清單

pip list

注意:因為我們在 2017 年,最好使用 python 3。您可以使用此命令創建 python 3 virtualenv。

virtualenv -p python3 envname

我有一個類似的問題。 我必須讓它以同樣的方式安裝,我們從 pypi 做。

我做了以下事情:

  1. 創建一個目錄來存儲可以訪問 Internet 的機器中的所有包。

     mkdir -p /path/to/packages/
  2. 下載所有包到路徑

編輯:您也可以嘗試:

 python3 -m pip wheel --no-cache-dir -r requirements.txt -w /path/to/packages
pip download -r requirements.txt -d /path/to/packages

Eg:- ls /root/wheelhouse/  # **/root/wheelhouse** is my **/path/to/packages/**
total 4524
-rw-r--r--. 1 root root   16667 May 23  2017 incremental-17.5.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root   34713 Sep  1 10:21 attrs-18.2.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root 3088398 Oct 15 14:41 Twisted-18.9.0.tar.bz2
-rw-r--r--. 1 root root  133356 Jan 28 15:58 chardet-3.0.4-py2.py3-none-any.whl
-rw-r--r--. 1 root root  154154 Jan 28 15:58 certifi-2018.11.29-py2.py3-none-any.whl
-rw-r--r--. 1 root root   57987 Jan 28 15:58 requests-2.21.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root   58594 Jan 28 15:58 idna-2.8-py2.py3-none-any.whl
-rw-r--r--. 1 root root  118086 Jan 28 15:59 urllib3-1.24.1-py2.py3-none-any.whl
-rw-r--r--. 1 root root   47229 Jan 28 15:59 tqdm-4.30.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root    7922 Jan 28 16:13 constantly-15.1.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root  164706 Jan 28 16:14 zope.interface-4.6.0-cp27-cp27mu-manylinux1_x86_64.whl
-rw-r--r--. 1 root root  573841 Jan 28 16:14 setuptools-40.7.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root   37638 Jan 28 16:15 Automat-0.7.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root   37905 Jan 28 16:15 hyperlink-18.0.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root   52311 Jan 28 16:15 PyHamcrest-1.9.0-py2.py3-none-any.whl
 -rw-r--r--. 1 root root   10586 Jan 28 16:15 six-1.12.0-py2.py3-none-any.whl
  1. 打包包目錄並將其復制到無法訪問 Internet 的機器上。 然后做,

     cd /path/to/packages/ tar -cvzf packages.tar.gz . # not the . (dot) at the end

packages.tar.gz復制到無法訪問 Internet 的目標計算機中。

  1. 在無法訪問 Internet 的機器上,執行以下操作(假設您將 tarred 包復制到當前機器中的/path/to/package/中)

     cd /path/to/packages/ tar -xvzf packages.tar.gz mkdir -p $HOME/.config/pip/ vi $HOME/.config/pip/pip.conf

並將以下內容粘貼到里面並保存。

[global]
timeout = 10
find-links = file:///path/to/package/
no-cache-dir = true
no-index = true
  1. 最后,我建議您使用某種形式的virtualenv來安裝軟件包。

     virtualenv -p python2 venv # use python3, if you are on python3 source ./venv/bin/activate pip install <package>

您應該能夠下載目錄/path/to/package/中的所有模塊。

注意:我只這樣做了,因為我無法添加選項或更改我們安裝模塊的方式。 否則我會做的

pip install --no-index --find-links /path/to/download/dir/ -r requirements.txt

下載tarball ,將其傳輸到您的 FreeBSD 機器並解壓,然后運行python setup.py install就完成了!

編輯:再補充一點,您現在也可以使用 pip 安裝 tarball。

使用wheel編譯包。

打包:

$ tempdir=$(mktemp -d /tmp/wheelhouse-XXXXX)
$ pip wheel -r requirements.txt --wheel-dir=$tempdir
$ cwd=`pwd`
$ (cd "$tempdir"; tar -cjvf "$cwd/bundled.tar.bz2" *)

復制壓縮包並安裝:

$ tempdir=$(mktemp -d /tmp/wheelhouse-XXXXX)
$ (cd $tempdir; tar -xvf /path/to/bundled.tar.bz2)
$ pip install --force-reinstall --ignore-installed --upgrade --no-index --no-deps $tempdir/*

注意wheel二進制包不跨機器。

更多參考。 在這里: https ://pip.pypa.io/en/stable/user_guide/#installation-bundles

作為對@chaokunyang 的繼續回答,我想把我寫的可以完成工作的腳本放在這里:

  1. 編寫一個“requirements.txt”文件,指定要打包的庫。
  2. 創建一個包含所有庫的 tar 文件(請參閱 Packer 腳本)。
  3. 將創建的 tar 文件放入目標機器並解壓縮。
  4. 運行安裝程序腳本(它也被打包到 tar 文件中)。

“requirements.txt”文件

docker==4.4.0

Packer 端:文件名:“create-offline-python3.6-dependencies-repository.sh”

#!/usr/bin/env bash

# This script follows the steps described in this link:
# https://stackoverflow.com/a/51646354/8808983

LIBRARIES_DIR="python3.6-wheelhouse"

if [ -d ${LIBRARIES_DIR} ]; then
    rm -rf ${LIBRARIES_DIR}/*
else
    mkdir ${LIBRARIES_DIR}
fi

pip download -r requirements.txt -d ${LIBRARIES_DIR}

files_to_add=("requirements.txt" "install-python-libraries-offline.sh")

for file in "${files_to_add[@]}"; do
    echo "Adding file ${file}"
    cp "$file" ${LIBRARIES_DIR}
done

tar -cf ${LIBRARIES_DIR}.tar ${LIBRARIES_DIR}

安裝程序端:文件名:“install-python-libraries-offline.sh”

#!/usr/bin/env bash

# This script follows the steps described in this link:
# https://stackoverflow.com/a/51646354/8808983

# This file should run during the installation process from inside the libraries directory, after it was untared:
# pythonX-wheelhouse.tar -> untar -> pythonX-wheelhouse
# |
# |--requirements.txt
# |--install-python-libraries-offline.sh


pip3 install -r requirements.txt --no-index --find-links .

對於 Pip 8.1.2,您可以使用pip download -r requ.txt將包下載到本地計算機。

從 Pypi 下載輪子文件(例如 dlb-0.5.0-py3-none-any.whl)並

pip install dlb-0.5.0-py3-none-any.whl

要下載包含所有依賴項的包,請創建一個文件夾 Mypackage,
移至此文件夾:

cd Mypackage

使用 pip 下載軟件包后:

pip download PackageName

在離線機器上,加載文件夾並運行:

for %x in (dir *.whl) do python -m pip install %x

您可以查看如何在 cmd 中安裝多個 whl 文件

確保使用相同版本的python,或在“pip下載”中添加版本命令

對於 Windows,我使用了以下內容

網絡連接

1.創建任何名稱的目錄。我用“repo”創建

2.使用以下命令下載庫(它將下載而不是安裝)

pip 下載庫名稱 -d"C:\repo"

pip download openpyxl -d"C:\repo"
  1. 然后你會發現多個 .whl 擴展文件

  2. 復制 requirements.txt 中的所有文件名在此處輸入圖像描述

沒有網絡連接

  1. 現在將此文件夾和文件移動到沒有互聯網連接的 PC 並運行以下命令。
pip install -r requirements.txt --find-links=C:\repo --no-index

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM