Как установить пакеты в автономном режиме?

160

Как лучше всего загрузить пакет python и его зависимости от pypi для автономной установки на другую машину? Есть ли простой способ сделать это с помощью pip или easy_install? Я пытаюсь установить библиотеку запросов на коробку FreeBSD, которая не подключена к Интернету.

Крис Дранц
источник

Ответы:

77

Если пакет находится в PYPI, загрузите его и его зависимости в некоторый локальный каталог. Например

$ mkdir / pypi && cd / pypi
$ ls -la
  -rw-r - r-- 1 посох Павел 237954 19 апреля 11:31 Flask-WTF-0.6.tar.gz
  -rw-r - r-- 1 штатный сотрудник 389741 22 февраля 17:10 Jinja2-2.6.tar.gz
  -rw-r - r-- 1 штатный сотрудник 70305 11 апреля, 00:28 MySQL-python-1.2.3.tar.gz
  -rw-r - r-- 1 штатный сотрудник 2597214 10 апреля 18:26 SQLAlchemy-0.7.6.tar.gz
  -rw-r - r-- 1 штатный сотрудник 1108056 22 февраля 17:10 Werkzeug-0.8.2.tar.gz
  -rw-r - r-- 1 штатный сотрудник 488207 10 апреля 18:26 boto-2.3.0.tar.gz
  -rw-r - r-- 1 посох Павел 490192 16 апреля 12:00 фляга-0,9-dev-2a6c80a.tar.gz

Некоторые пакеты, возможно, придется архивировать в похожие тарболы вручную. Я делаю это много, когда хочу более свежую (менее стабильную) версию чего-либо. Некоторые пакеты не на PYPI, так же относится и к ним.

Предположим, у вас есть правильно сформированное приложение Python в ~/src/myapp. ~/src/myapp/setup.pyбудет install_requiresсписок, который упоминает одну или несколько вещей, которые у вас есть в вашем /pypiкаталоге. Вот так:

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

Если вы хотите иметь возможность запускать ваше приложение со всеми необходимыми зависимостями, в то же время взламывая его, вы сделаете что-то вроде этого:

$ cd ~ / src / myapp
$ python setup.pyvelop --always-unzip --allow-hosts = Нет --find-links = / pypi

Таким образом, ваше приложение будет выполняться прямо из вашего исходного каталога. Вы можете взломать вещи, а затем перезапустить приложение, не восстанавливая ничего.

Если вы хотите установить свое приложение и его зависимости в текущую среду Python, вы сделаете что-то вроде этого:

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

В обоих случаях сборка завершится неудачей, если в /pypiкаталоге нет одной или нескольких зависимостей . Он не будет пытаться беспорядочно установить недостающие вещи из Интернета.

Я настоятельно рекомендую вызывать setup.py develop ...и easy_install ...в активной виртуальной среде, чтобы не загрязнять вашу глобальную среду Python. Это (virtualenv то есть) в значительной степени путь. Никогда не устанавливайте ничего в глобальную среду Python.

Если компьютер, на котором вы создали ваше приложение, имеет ту же архитектуру, что и компьютер, на котором вы хотите его развернуть, вы можете просто скопировать весь каталог виртуальной среды, в который вы easy_installввели все. Однако непосредственно перед тарболингом необходимо сделать каталог виртуальной среды перемещаемым (см. Параметр --relocatable ). ПРИМЕЧАНИЕ: на целевом компьютере должна быть установлена ​​та же версия Python, а также должны быть предварительно установлены любые зависимости на основе C, которые может иметь ваше приложение (например, если вы зависите от PIL , то должны быть предварительно установлены libpng, libjpeg и т. Д.) ,

Павел Репин
источник
3
Вместо --allow-hosts=Noneтебя можно было бы использовать переключатель--no-index
romor
Не могли бы вы рассказать, как создать правильно сформированное приложение Python?
PSR
3
@PrabhjotRai, пожалуйста, обращайтесь по адресу packaging.python.org/distributing
Павел Репин
300

Команда 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для установки этих загруженных sdists без доступа к сети.

Карл Мейер
источник
Проблема в том, что зависимости могут иметь другие зависимости, и они не будут загружены.
Викки
Змеиная корзина (построенная поверх pip) также загрузит зависимости зависимостей.
Викки
14
@vikki Не верно, «pip install --download» также загружает зависимости, поэтому приведенные выше команды будут работать правильно, даже если у ваших требований есть дополнительные зависимости. Змеиная корзина может делать другие полезные вещи (никогда не использовала ее), но она определенно не нужна по этой причине.
Карл Мейер
6
@vikki Я понимаю, что вы говорите, но я говорю вам, что это неправда :-) На самом деле вы должны попробовать это, прежде чем снова опубликовать то же утверждение. Я просто поместил «pytest» в файл require.txt, запустил «pip install --download. -R needs.txt», и он загрузил sdists как для pytest, так и для его зависимости setup.py «py».
Карл Мейер
3
Я думаю, что так и должно быть: --find-links file:/path/to/some/dir/и вы должны загрузить и установить с той же версией pip - иначе это может
произойти
57

Если вы хотите установить библиотеки 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) Скопируйте файл require.txt в wheelhouseкаталог

4) Архив рубки в wheelhouse.tar.gzсtar -zcf wheelhouse.tar.gz wheelhouse

Затем загрузите wheelhouse.tar.gzна целевую машину:

1) Выполнить, tar -zxf wheelhouse.tar.gzчтобы извлечь файлы

2) Выполнить pip install -r wheelhouse/requirements.txt --no-index --find-links wheelhouseдля установки библиотек и их зависимостей

chaokunyang
источник
6
Это самый ясный ответ с правильными шагами для начинающего. Спасибо
kumarharsh
Это самый питонический способ, который я когда-либо видел. Спасибо!
peluzza
2
но, следуя вашей инструкции, когда я pip installв конце концов, он говорит: ОШИБКА: не удалось найти версию, которая удовлетворяет требованию ..`
DennisLi
@DennisLi какая у тебя версия на python и pip?
Chaokunyang
Я понял это потому, что pip не может найти конкретную версию пакета pandas в моем файле require.txt, так как я использовал pip3 для установки pandas 0.2
DennisLi
13

автономный питон. для этого я использую virtualenv (изолированная среда Python)

1) установить virtualenv онлайн с помощью pip:

pip install virtualenv --user

или в автономном режиме с помощью whl: перейдите по этой ссылке , загрузите последнюю версию (.whl или tar.gz) и установите ее с помощью этой команды:

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

используя --userвам не нужно использовать sudo pip….

2) использовать virtualenv

на онлайн-машине выберите каталог с терминалом cdи запустите этот код:

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

после установки всех пакетов вы должны сгенерировать requirements.txtтак, пока ваш virtualenv активен, напишите

pip freeze > requirements.txt

откройте новый терминал и создайте еще один тип env myenv2.

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

Теперь вы можете перейти в автономную папку, где находятся ваши папка requirements.txtи tranferred_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

что находится в папке в автономном режиме [needs.txt, tranferred_packages {Flask-0.10.1.tar.gz, ...}]

проверить список вашей посылки

pip list

примечание: как и в 2017 году, лучше использовать python 3. вы можете создать python 3 virtualenv с помощью этой команды.

virtualenv -p python3 envname
cyera
источник
2
Похоже, что здесь пропущены или «запутаны» шаги, я бы ожидал увидеть «деактивировать», а затем «заморозить пипс» ... cd в автономном режиме и ./tranferred_packages появляется из ниоткуда - ясно, что это требует очистки?
Ханну
может быть, но вы должны подумать: «Мне нужен короткий пост», «этот процесс был сложным, и я не мог написать каждый шаг (это возможно только на YouTube)».
cyera
Это лучший ответ imho.
Очень
Это было бы лучшим ответом, если бы вообще говорилось о том, как настроить папку tranferred_packages. Без решающих шагов -1
Зима
8

Скачайте tarball , перенесите его на свой компьютер с FreeBSD и распакуйте его, затем запустите, python setup.py installи все готово!

РЕДАКТИРОВАТЬ: Просто чтобы добавить к этому, вы также можете установить tarballs с pip сейчас.

dav1d
источник
1
Как насчет всех зависимостей? Какой лучший способ их решить? Нужно ли также устанавливать зависимости вручную?
Крис Дранц
Да, к сожалению, это единственный способ, которым я знаю.
dav1d
8

Позвольте мне пройти процесс шаг за шагом:

  1. На компьютере, подключенном к Интернету, создайте папку.
   $ mkdir packages
   $ cd packages
  1. откройте командную строку или оболочку и выполните следующую команду:

    Предположим, что вы хотите пакет tensorflow

    $ pip download tensorflow

  2. Теперь на целевом компьютере скопируйте packagesпапку и примените следующую команду

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

Обратите внимание, что tensorflow-xyz.whlнеобходимо заменить оригинальное имя требуемой упаковки.

arunanshub
источник
6

Использование 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" *)

скопируйте tarball и установите:

$ 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

eshizhan
источник
1
У меня были проблемы с подключением на компьютере с Python 3.6 и извлечением на другом с Python 3.5: « <пакет> .whl не поддерживается колесом на этой платформе ». Версии источника и назначения могут потребоваться для соответствия некоторым пакетам.
Юусо Охтонен
6

У меня была похожая проблема. И я должен был установить его так же, как мы сделали из pypi.

Я сделал следующие вещи:

  1. Создайте каталог для хранения всех пакетов на машине, которые имеют доступ к Интернету.

    mkdir -p /path/to/packages/
  2. Скачать все пакеты по пути

    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
  3. Загрузите каталог с пакетами и скопируйте его на компьютер, на котором нет доступа к Интернету. Тогда делай,

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

    Скопируйте packages.tar.gz в конечный компьютер, у которого нет доступа к Интернету.

  4. На компьютере, который не имеет доступа к Интернету, выполните следующие действия (при условии, что вы скопировали 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
  5. Наконец, я предлагаю вам использовать некоторую форму 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
Хан Соло
источник
3

Для Pip 8.1.2 вы можете использовать pip download -r requ.txtдля загрузки пакетов на ваш локальный компьютер.

Умут Гунебакан
источник