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.
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).
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.
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
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
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:
- na komputerze podłączonym do Internetu utwórz folder.
$ mkdir packages
$ cd packages
-
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
-
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.
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.
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:
-
Utwórz katalog do przechowywania wszystkich pakietów w komputerze, które mają dostęp do Internetu.
mkdir -p /path/to/packages/
-
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
-
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.
-
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
-
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
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
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.
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
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:
- napisz " wymagania.txt " plik, który określa biblioteki, które chcesz spakować.
- Utwórz plik tar zawierający wszystkie Twoje biblioteki (patrz skrypt Packera).
- Umieść utworzony plik tar w docelowej maszynie i rozpakuj go.
- 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 .
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