Автономная Установка Пакетов Python

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

7 ответов


если пакет находится на 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

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

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

  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 .

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

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

если машина, на которой вы создали приложение, имеет ту же архитектуру, что и машина, на которой вы хотите его развернуть, вы можете просто tarball весь каталог виртуальной среды, в который вы easy_install - ed все. Однако перед tarballing вы должны сделать каталог виртуальной среды перемещаемым (см. --relocatable). Примечание: на целевой машине должна быть установлена та же версия Python, и также любые зависимости на основе C, которые может иметь ваше приложение, также должны быть предустановлены (например, если вы зависите от PIL, затем должны быть предустановлены libpng, libjpeg и т. д.).


я использую -d (или --download опции) в pip install, что делает процесс загрузки sdist tarballs из PyPI намного проще. Например, pip install --download /path/to/some/dir celery загрузит sdist tarballs для сельдерея и всех его зависимостей в /path/to/some/dir (но не устанавливать их). Тогда вы можете использовать pip install --no-index --find-links /path/to/some/dir/ celery чтобы установить сельдерей, используя эти загруженные sdists, без доступа к сети.

тот же самый процесс работает, если вы замените celery в обеих командах с -r requirements.txt, где требования.txt-это файл требований pip, в котором перечислены все пакеты, которые вы хотите (и, возможно, версии, которые вы хотите).

обновление

DEPRECATION: pip install --download был устаревшим и будет снимается в будущем. У Пипа теперь есть скачать команда, которая должна быть используется вместо этого.

команда выглядит так:
pip download -r requirements.txt

для python3:
pip3 download -r requirements.txt


скачать архив, перенесите его на свою машину FreeBSD и извлеките, после чего запустите python setup.py install и ты молодец!

EDIT: просто чтобы добавить это, вы также можете установить tarballs с pip сейчас.


автономный python. для этого я использую 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 и здесь. загрузите пакеты со следующим кодом и поместите их все в .

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

что находится в папке offline [требования.txt, tranferred_packages {колба-0.10.1.смола.ГЗ ...}]

проверьте список вашего пакета

pip list

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

virtualenv -p python3 envname

используя wheel собранные пакеты.

bundle up:

$ 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 двоичные пакеты не находятся на разных машинах.

больше ref. вот:https://pip.pypa.io/en/stable/user_guide/#installation-bundles


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


если вы хотите установить Python libs и их зависимости в автономном режиме, выполните следующие действия на машине с той же ОС, подключенной к сети, установленной python:

1) Создать requirements.txt файл с таким содержимым, как:

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

2) Выполнить команду mkdir wheelhouse && pip download -r requirements.txt -d wheelhouse для загрузки библиотек и их зависимостей в direcotry wheelhouse

3) требования к копии.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 для установки libs и их зависимостей