Установка пакетов python без Интернета и использование исходного кода как .tar.gz и .whl

мы пытаемся установить пару пакетов python без Интернета.

For ex : python-keystoneclient

Для этого у нас есть пакеты, загруженные из https://pypi.python.org/pypi/python-keystoneclient/1.7.1 и хранящиеся на сервере.

Однако при установке пакетов tar.gz и .whl установка сначала ищет зависимые пакеты. Поскольку на сервере нет подключения к Интернету, он становится неудачным.

Например: для python-keystoneclient мы имеем следующие зависимые пакеты

stevedore (>=1.5.0)
six (>=1.9.0)
requests (>=2.5.2)
PrettyTable (<0.8,>=0.7)
oslo.utils (>=2.0.0)
oslo.serialization (>=1.4.0)
oslo.i18n (>=1.5.0)
oslo.config (>=2.3.0)
netaddr (!=0.7.16,>=0.7.12)
debtcollector (>=0.3.0)
iso8601 (>=0.1.9)
Babel (>=1.3)
argparse
pbr (<2.0,>=1.6)

Когда я пытаюсь установить пакеты по одному из приведенного выше списка, он снова ищет вложенную зависимость.

Можно ли указать список ALL зависимых пакетов для установки модуля python, такого как python-keystoneclient.

Ответ 1

Вот как я обрабатываю этот случай:

На компьютере, где у меня есть доступ к Интернету:

mkdir keystone-deps
pip download python-keystoneclient -d "/home/aviuser/keystone-deps"
tar cvfz keystone-deps.tgz keystone-deps

Затем переместите файл tar на конечный компьютер, который не имеет доступа в Интернет, и выполните следующее:

tar xvfz keystone-deps.tgz
cd keystone-deps
pip install python_keystoneclient-2.3.1-py2.py3-none-any.whl -f ./ --no-index

Ответ 2

У нас есть аналогичная ситуация на работе, когда производственные машины не имеют доступа к Интернету; поэтому все должно управляться автономно и вне хоста.

Вот что я пробовал с разнообразными успехами:

  1. basket которая представляет собой небольшую утилиту, которую вы запускаете на своем интернет-хосте. Вместо того, чтобы пытаться установить пакет, он вместо этого загрузит его, и все остальное, что требуется для его установки в каталог. Затем вы перемещаете этот каталог на свою целевую машину. Плюсы: очень простые и простые в использовании, без головных болей сервера; нет портов для настройки. Минусы: нет настоящих шоу-стопперов, но самый большой из них заключается в том, что он не учитывает ни одной версии, которую вы можете иметь; он всегда будет загружать последнюю версию пакета.

  2. Запустите локальный pypi-сервер. Используется pypiserver и devpi. pypiserver очень прост в установке и настройке; devpi требует немного более пристального внимания. Они оба делают то же самое - действуют как прокси-кеш для реального pypi и как локальный pypi-сервер для любых домашних пакетов. localshop - это новый, который не был вокруг, когда я смотрел, он также имеет ту же идею. Итак, как это работает, ваш компьютер, подключенный к интернету, подключится к этим серверам, затем они будут подключены к Интернету, чтобы они могли кэшировать и проксировать фактический репозиторий.

Проблема со вторым подходом заключается в том, что, хотя вы получаете максимальную совместимость и доступ ко всему хранилищу пакетов Python, вам все равно нужно убедиться, что на ваших целевых компьютерах установлены какие-либо/все зависимости (например, любые заголовки для драйверов баз данных и построить инструментальную цепочку). Кроме того, эти решения не обслуживают не-pypi-репозитории (например, пакеты, размещенные на github).

Мы получили очень далеко со вторым вариантом, хотя, поэтому я определенно рекомендую его.

В конце концов, уставая от проблем с совместимостью и библиотек, мы перенесли весь цирк серверов на коммерчески поддерживаемые контейнеры докеров.

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

Мы заменили pypi-репозитории на локальный сервер изображений докеров.

Ответ 3

pipdeptree - утилита командной строки для отображения пакетов python, установленных в virtualenv в виде дерева зависимостей. Просто используйте его: https://github.com/naiquevin/pipdeptree

Ответ 4

Если вы хотите установить кучу зависимостей, например, require.txt, вы бы сделали:

mkdir dependencies
pip download -r requirements.txt -d "./dependencies"
tar cvfz dependencies.tar.gz dependencies

И, как только вы переместите dependencies.tar.gz на машину, у которой нет интернета, вы бы сделали:

tar zxvf dependencies.tar.gz
cd dependencies
pip install * -f ./ --no-index