Jak zainstalować pakiety w trybie offline?

Jaki jest najlepszy sposób na pobranie pakietu Pythona i jego zależności z pypi do instalacji offline na innym komputerze? Czy jest jakiś łatwy sposób, aby to zrobić z pip lub easy_install? Próbuję zainstalować bibliotekę requests na skrzynce FreeBSD, która nie jest podłączona do Internetu.

Author: martineau, 2012-06-18

11 answers

Jeśli pakiet znajduje się na PYPI, pobierz go i jego zależności do jakiegoś lokalnego katalogu. Np.

$ 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

Niektóre pakiety mogą być ręcznie archiwizowane do podobnych tarballi. Robię to często, gdy chcę mieć nowszą (mniej stabilną) wersję czegoś. Niektóre pakiety nie są na PYPI, więc dotyczy ich to samo.

Załóżmy, że masz poprawnie uformowaną aplikację Pythona w ~/src/myapp. ~/src/myapp/setup.py będzie miała install_requires listę, która wymienia jedną lub więcej rzeczy, które masz w swoim /pypi katalog. Tak:

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

Jeśli chcesz mieć możliwość uruchamiania aplikacji ze wszystkimi niezbędnymi zależnościami, a jednocześnie hakowania, zrobisz coś takiego:

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

W ten sposób Twoja aplikacja zostanie uruchomiona bezpośrednio z katalogu źródłowego. Możesz włamać się do rzeczy, a następnie ponownie uruchomić aplikację bez przebudowy czegokolwiek.

Jeśli chcesz zainstalować swoją aplikację i jej zależności w bieżącym środowisku Pythona, zrobisz coś takiego:

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

W w obu przypadkach kompilacja zakończy się niepowodzeniem, jeśli w katalogu /pypi nie występuje jedna lub więcej zależności. Nie będzie próbował rozwiązująco instalować brakujących rzeczy z Internetu.

Gorąco polecam wywoływanie setup.py develop ... i easy_install ... w aktywnym wirtualnym środowisku , aby uniknąć skażenia globalnego środowiska Pythona. To jest (virtualenv to jest) prawie droga do zrobienia. Nigdy nie instaluj niczego w globalnym środowisku Pythona.

Jeśli maszyna, na której zbudowałeś swoją aplikację ma taką samą architekturę jak maszyna, na której chcesz ją wdrożyć, możesz po prostu wrzucić cały katalog środowiska wirtualnego, do którego możesz edytować wszystko. Tuż przed tarballingiem, musisz przenieść katalog środowiska wirtualnego (Zobacz opcję --relocatable ). Uwaga: docelowa maszyna musi mieć zainstalowaną tę samą wersję Pythona, a także wszelkie zależności oparte na C, które może mieć Twoja aplikacja, muszą być tam preinstalowane (np. na PIL , wtedy libpng, libjpeg, itd. muszą być preinstalowane).

 78
Author: Pavel Repin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-18 22:39:22

Polecenie pip download pozwala na pobieranie pakietów bez ich instalowania:

pip download -r requirements.txt

(w poprzednich wersjach pip zapisywano to pip install --download -r requirements.txt.)

Następnie możesz użyć pip install --no-index --find-links /path/to/download/dir/ -r requirements.txt, aby zainstalować pobrane sdists, bez dostępu do sieci.

 334
Author: Carl Meyer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-04 02:43:39

Jeśli chcesz zainstalować biblioteki Pythona i ich zależności w trybie offline, wykonaj następujące kroki na komputerze z tym samym systemem operacyjnym, połączonym z siecią i zainstalowanym Pythonem:]}

1) Utwórz plik requirements.txt o podobnej treści (Uwaga-są to biblioteki, które chcesz pobrać):

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

Jedną z opcji tworzenia pliku wymagań jest użycie pip freeze > requirements.txt. Wyświetli listę wszystkich bibliotek w Twoim środowisku. Następnie możesz wejść do requirements.txt i usunąć niepotrzebne.

2) Wykonaj polecenie mkdir wheelhouse && pip download -r requirements.txt -d wheelhouse do pobierania bibliotek i ich zależności do katalogu wheelhouse

3) Wymagania dotyczące kopii.txt do katalogu wheelhouse

4) archiwum do wheelhouse.tar.gz z tar -zcf wheelhouse.tar.gz wheelhouse

Następnie prześlij wheelhouse.tar.gz do docelowej maszyny:

1) wykonaj tar -zxf wheelhouse.tar.gz aby rozpakować pliki

2) Wykonaj pip install -r wheelhouse/requirements.txt --no-index --find-links wheelhouse aby zainstalować biblioteki i ich zależności

 83
Author: chaokunyang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-09-18 15:01:18

Offline python. w tym celu używam virtualenv (izolowane środowisko Pythona)

1) Zainstaluj virtualenv online z pip:

pip install virtualenv --user

Lub offline z whl: przejdź do tego link , Pobierz ostatnią wersję (.whl lub smoła.gz) i zainstaluj to poleceniem:

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

Używając --user nie musisz używać sudo pip….

2) Użyj virtualenv

Na maszynie online wybierz katalog z terminalem cd i uruchom ten kod:

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

Po instalując wszystkie pakiety, musisz wygenerować requirements.txt, więc gdy twój virtualenv jest aktywny, napisz

pip freeze > requirements.txt

Otwórz nowy terminal i utwórz inny ENV podobny do myenv2.

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

Teraz możesz przejść do folderu offline, gdzie znajdują się folder requirements.txt i tranferred_packages. Pobierz pakiety z poniższym kodem i umieść je wszystkie w folderze tranferred_packages.

pip download -r requirements.txt

Przenieś folder offline na komputer offline, a następnie

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

Co znajduje się w folderze offline [wymagania.txt, tranferred_packages {Flask-0.10.1.smoła.gz,..}]

Sprawdź listę swojej paczki

pip list

Uwaga: Ponieważ jesteśmy w 2017 roku, lepiej jest użyć Pythona 3. możesz utworzyć python 3 virtualenv za pomocą tego polecenia.

virtualenv -p python3 envname
 14
Author: cyera,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-27 23:51:01

Pozwól mi przejść przez proces krok po kroku:

  1. na komputerze podłączonym do Internetu utwórz folder.
   $ mkdir packages
   $ cd packages
  1. Otwórz wiersz polecenia lub powłokę i wykonaj następujące polecenie:

    Załóżmy, że pakiet, który chcesz, to tensorflow

    $ pip download tensorflow

  2. Teraz na komputerze docelowym skopiuj folder packages i zastosuj następujące polecenie

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

Należy pamiętać, że {[5] } należy zastąpić oryginałem nazwa wymaganego pakietu.

 10
Author: arunanshub,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-10-25 15:04:56

Pobierz tarball , przenieś go do swojego FreeBSD i rozpakuj, następnie uruchom {[0] } i gotowe!

EDIT: aby dodać do tego, możesz również zainstalować tarballe z pip teraz.

 7
Author: dav1d,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-07 10:03:54

Miałem podobny problem. I musiałem go zainstalować tak samo jak my z pypi.

Zrobiłem następujące rzeczy:

  1. Utwórz katalog do przechowywania wszystkich pakietów w komputerze, które mają dostęp do Internetu.

    mkdir -p /path/to/packages/
    
  2. Pobierz wszystkie pakiety na ścieżkę

Edit: możesz też spróbować:

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. Tar katalog packages i skopiuj go do komputera, który nie ma dostępu do Internetu. Więc zrób,

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

Skopiuj Pakiety.smoła.gz do docelowej maszyny, która nie ma dostępu do Internetu.

  1. Na komputerze, który nie ma dostępu do Internetu, wykonaj następujące czynności (zakładając, że skopiowałeś smar do / path / to / package / w bieżącej Maszynie)

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

I wklej następującą zawartość do środka i zapisz ją.

[global]
timeout = 10
find-links = file:///path/to/package/
no-cache-dir = true
no-index = true
  1. Na koniec proponuję użyć jakiejś formy virtualenv do Instalowanie pakietów.

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

Powinieneś być w stanie pobrać wszystkie moduły znajdujące się w katalogu /path/to/package/.

Uwaga: zrobiłem to tylko dlatego, że nie mogłem dodać opcji ani zmienić sposobu instalacji modułów. W przeciwnym razie zrobiłbym

pip install --no-index --find-links /path/to/download/dir/ -r requirements.txt
 7
Author: han solo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-09-03 13:27:19

Używanie wheel skompilowanych pakietów.

Wiązka:

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

Skopiuj tarball i zainstaluj:

$ 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/*

Uwaga wheel pakiety binarne nie są między maszynami.

Więcej ref. tutaj: https://pip.pypa.io/en/stable/user_guide/#installation-bundles

 6
Author: eshizhan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-20 02:46:37

Dla Pip 8.1.2 możesz użyć pip download -r requ.txt aby pobrać pakiety na lokalny komputer.

 3
Author: Umut Gunebakan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-15 07:08:15

Pobierz plik koła (na przykład dlb-0.5.0-py3-none-any.whl) z Pypi i

pip install dlb-0.5.0-py3-none-any.whl
 0
Author: strange-corner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-21 08:24:47

Jako kontynuację @ chaokunyang odpowiedzi, chcę umieścić tutaj skrypt, który piszę, że działa:

  1. napisz " wymagania.txt " plik, który określa biblioteki, które chcesz spakować.
  2. Utwórz plik tar zawierający wszystkie Twoje biblioteki (patrz skrypt Packera).
  3. Umieść utworzony plik tar w docelowej maszynie i rozpakuj go.
  4. Uruchom skrypt Instalatora (który jest również spakowany do pliku tar).

"Wymagania.txt " plik

docker==4.4.0

Pakowacz strona: nazwa pliku: "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}

Strona Instalatora: Nazwa pliku: "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 .
 0
Author: Rea Haas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-11-25 13:19:10