Как установить пакет python без интернета

Обновлено: 07.07.2024

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

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

для ex : Для python-keystoneclient у нас есть следующие зависимые пакеты

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

есть ли способ, мы могли бы перечислить все зависимые пакеты для установки модуля python, такого как python-keystoneclient.

вот как я справляюсь с этим делом:

на машине, где у меня есть доступ к интернету:

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

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

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

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

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

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

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

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

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

kgb_zor

Kostyan4ik, почему это нет возможности? С питоном всегда можно найти какую-нибудь возможность.

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

Тут происходит маленькая магия: вы с помощью питона запускаете pip прямо изнутри локально лежащего файла с его дистрибутивом. Этим pip'ом вы ставите самого себя на локальную машину. Примерно как Барон Мюнхаузен, но не больно.

Вы также можете сохранить перечень всех установленных пакетов на компе с инетом в текстовый файл, а потом, убрав из него лишнее, скачать все эти пакеты в локальный каталог, отнести на оффлайн-комп и там ставить через тот же pip

В Python 3.8 предлагается добавить альтернативу виртуальным окружениям — локальную директорию с пакетами PEP 582 Python local packages directory.

Данный PEP предлагает добавить в Python механизм автоматического обнаружения директории __pypackages__ и использовать её при импорте в качестве источника установленных пакетов. Директория __pypackages__ будет иметь больший приоритет при импорте, чем глобальные или пользовательские директории с пакетами. Это позволит исключить создание, активацию или деактивацию виртуальных окружений.

Вот так будет выглядеть в Python 3.8 структура пакета с использованием __pypackages__ :

В статье я расскажу как использовать локальную директорию с пакетами не дожидаясь выхода Python 3.8.

В статье описан базовый пример, проверенный в Linux, Python 3.5. Для других платформ, возможно, понадобится внести изменения.

Установка пакетов в локальную директорию

Установка почти не отличается от обычной установки пакетов с помощью pip, за исключением дополнительной опции --target . В ней указываем полный или относительный путь до директории с локальными пакетами.

$PWD — переменная с текущей рабочей директорией.

Будет создано следующее дерево директорий:

Версию Python и вложенные директории приходится указывать вручную.

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

Есть еще один способ установки пакетов в конкретную директорию :

Но нужно обязательно указывать полный путь до места установки и дерево директорий будет отличаться от предложенной в PEP 582:

Использование локальной директории с пакетами

После установки пакетов осталось указать интерпретатору где искать зависимости.

Для этого нужно внести в список sys.path путь до локальной директории с пакетами. Добавить путь достаточно в главный (загружаемый первым) модуль, в остальные добавлять не обязательно. После этого можно импортировать установленные локально пакеты.

Единственное условие — главный модуль должен быть на том же уровне вложенности, что и директория __pypackages__ .

Еще один способ указать Python, где искать пакеты — это выставить переменную окружения перед запуском скрипта.

Таким нехитрым способом можно добиться схожего с PEP 582 функционала уже сейчас.

У меня на работе ограничения и если я скачиваю пакеты с помощью команды pip через командную строку, то с интернета все блокирует служба безопасности. Поэтому мне надо скачать пакеты напрямую, а потом установить в оффлайн режиме с компа. Но не могу найти где их скачать.

Подскажите где можно напрямую скачивать пакеты? Мне нужны tqdm, pandas, numpy, sklearn.metrics, statsmodels, scipy, matplotlib

281 1 1 золотой знак 2 2 серебряных знака 10 10 бронзовых знаков А вообще, при вашем наборе пакетов, попробуйте дистрибутив Anaconda. Ведь у некоторых из перечисленных вами пакетов есть зависимости, которые pip сам устраняет. @mkkik плохой вариант, Anaconda это хороший вариант для Dev машин, когда на бою это уж чересчур раздутый набор lib, лучше и проще выкачивать нужный lib и установить, ответ Dmitry Erohin

Вы можете использовать pip , чтобы скачать нужные пакеты:

Если машина с интернетом отличается от системы, куда вы ставить хотите, то явно укажите платформу, используя --implementation , --platform , --python-version и другие опции. См. pip help download .

Затем перенесите папку dist на желаемую машину и установите без обращения на PyPI:

В простейшем случае requirements.txt это просто файл с именем пакета на каждой строчке:

Если платформы совпадают, то вы можете собрать двоичные wheels самостоятельно, если их ещё нет на PyPI:

50.1k 9 9 золотых знаков 94 94 серебряных знака 287 287 бронзовых знаков

Читайте также: