Как установить пакет python без интернета
мы пытаемся установить пару пакетов 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.
это означает, что мы отправляем все предварительно настроенные, ничего на самом деле не нужно устанавливать на производственных машинах, и это было самое бесплатное решение для нас.
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 бронзовых знаковЧитайте также: