2012-06-18 2 views
82

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

+1

Связанный: [Как установить пакеты установки в соответствии с требованиями.txt из локального каталога?] (http://stackoverflow.com/q/7225900/95735) –

ответ

42

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

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

Предположим, что у вас правильно сформированное приложение Python в ~/src/myapp. ~/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 

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

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

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

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

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

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

+2

Вместо '--allow-hosts = None' вы можете использовать переключатель' --no-index' – romor

+0

Не могли бы вы рассказать о том, как создать правильно сформированное приложение Python? –

+2

@PrabhjotRai см. Https://packaging.python.org/distributing/ –

4

Загрузите tarball, перенесите его на свою машину FreeBSD и извлеките, затем запустите python setup.py install, и все готово!

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

+1

Как насчет всех зависимостей? Каков наилучший способ их решения? Нужно ли вручную устанавливать зависимости? –

+0

Да, это, к несчастью, единственный способ узнать. – dav1d

157

Я использую -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 представляет собой файл требований к требованиям, в котором перечислены все необходимые вам пакеты (и, при необходимости, нужные версии).

UPDATE

устаревания: пип установить --download устарела и будет удален в будущем. Pip теперь имеет команду download, которая вместо этого должна быть .

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

Для Python3:
pip3 download -r requirements.txt

+0

Проблема заключается в том, что зависимости могут иметь другие зависимости, и они не будут загружены. – vikki

+0

[Змеиная корзина] (https://github.com/prezi/snakebasket) (построенная на вершине пипа) также загрузит зависимости зависимостей. – vikki

+4

@vikki Неверно, «pip install --download» также загружает зависимости, поэтому приведенные выше команды будут работать корректно, даже если ваши требования имеют дополнительные зависимости. Змеиная корзина может делать другие полезные вещи (никогда не использовала ее), но это определенно не нужно по этой причине. –

2

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

2

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

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

pip install virtualenv --user 

или в автономном режиме с WHL: перейти на эту link, скачать последнюю версию (.whl или деготь. 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 

, что находится в папке форума [requirements.txt, tranferred_packages {Колба-0.10.1.tar.gz, ...} ]

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

pip list 

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

virtualenv -p python3 envname 
+0

Здесь, кажется, отсутствуют шаги или «обфускации», я ожидаю увидеть «деактивировать», а затем «pip freeze» ... cd offline и ./tranferred_packages появляется из ниоткуда - ясно, что это требует очистки? – Hannu

+0

может быть, но вы должны подумать: «Я хотел короткую почту», «этот процесс был сложным, и я не мог писать каждый шаг (что только возможно на YouTube)». – cyera

2

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 бинарные пакеты не между машинами.

Подробнее ref. здесь: https://pip.pypa.io/en/stable/user_guide/#installation-bundles

+1

У меня были проблемы с подключением к компьютеру с Python 3.6 и извлечение из другого с помощью Python 3.5: «_ .whl не поддерживает колесо на этой платформе». Исходные и целевые версии могут потребоваться для соответствия некоторым пакетам. –

Смежные вопросы