Как установить локальный кеш с помощью пипа?

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

Это снизит пропускную способность и время загрузки.

    Обновлен ответ 19-ноя-15

    Согласно документации Pip :

    Начиная с v6.0, pip обеспечивает кеширование по умолчанию, которое функционирует аналогично тому, как в веб-браузере. Хотя кеш включен по умолчанию и разработан правильно, по умолчанию вы можете отключить кеш и всегда обращаться к PyPI, используя параметр --no-cache-dir .

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

    Оригинальный ответ

    Из новостей pip , версия 0.1.4:

    Добавлена ​​поддержка переменной окружения $ PIP_DOWNLOAD_CACHE, которая будет кэшировать загрузку пакетов, поэтому будущие установки не потребуют больших загрузок. Доступ к сети по-прежнему требуется, но при использовании этого можно избежать некоторых загрузок.

    Чтобы воспользоваться этим, я добавил следующее в свой ~/.bash_profile :

     export PIP_DOWNLOAD_CACHE=$HOME/.pip_download_cache 

    или, если вы находитесь на Mac:

     export PIP_DOWNLOAD_CACHE=$HOME/Library/Caches/pip-downloads 

    Заметки

    1. Если обнаружена более новая версия пакета, она будет загружена и добавлена ​​в каталог PIP_DOWNLOAD_CACHE . Например, теперь у меня довольно много пакетов Django.
    2. Это не устраняет необходимость в доступе к сети, как указано в новостях pip , поэтому это не ответ на создание новых virtualenvs на самолете, но он по-прежнему велик.

    На мой взгляд, pip2pi – гораздо более элегантное и надежное решение этой проблемы.

    Из документов:

    pip2pi создает repository пакетов, совместимых с PyPI, из требований протокола

    pip2pi позволяет вам создать свой собственный индекс PyPI, используя две простые команды:

    1. Чтобы зеркалировать пакет и все его требования, используйте pip2tgz :

       $ cd /tmp/; mkdir package/ $ pip2tgz packages/ httpie==0.2 ... $ ls packages/ Pygments-1.5.tar.gz httpie-0.2.0.tar.gz requests-0.14.0.tar.gz 
    2. Чтобы создать индекс пакета из предыдущего каталога:

       $ ls packages/ bar-0.8.tar.gz baz-0.3.tar.gz foo-1.2.tar.gz $ dir2pi packages/ $ find packages/ /httpie-0.2.0.tar.gz /Pygments-1.5.tar.gz /requests-0.14.0.tar.gz /simple /simple/httpie /simple/httpie/httpie-0.2.0.tar.gz /simple/Pygments /simple/Pygments/Pygments-1.5.tar.gz /simple/requests /simple/requests/requests-0.14.0.tar.gz 
    3. Чтобы установить из индекса, который вы создали на шаге 2., вы можете просто использовать:

       pip install --index-url=file:///tmp/packages/simple/ httpie==0.2 

    Вы даже можете отразить свой собственный индекс на удаленном хосте с помощью pip2pi .

    Для новых версий Pip:

    В версиях Newer теперь кешируются загрузки по умолчанию. См. Эту документацию:

    https://pip.pypa.io/en/stable/reference/pip_install/#caching

    Для старых версий Пита:

    Создайте файл конфигурации с именем ~/.pip/pip.conf и добавьте следующее содержимое:

     [global] download_cache = ~/.cache/pip 

    В OS X лучшим выбором будет ~/Library/Caches/pip поскольку он следует за другими программами OS X.

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

    Лучшим способом управления кешем загрузки пипов является разделение шага «загрузить пакет» с шага «установить пакет». Загруженные файлы обычно называются «sdist files» (исходные дистрибутивы), и я собираюсь хранить их в каталоге $ SDIST_CACHE.

    Эти два этапа в конечном итоге:

     pip install --no-install --use-mirrors -I --download=$SDIST_CACHE  

    Который загрузит пакет и поместит его в каталог, на который указывает $ SDIST_CACHE. Он не будет устанавливать пакет. И тогда вы запускаете:

     pip install --find-links=file://$SDIST_CACHE --no-index --index-url=file:///dev/null  

    Чтобы установить пакет в вашу виртуальную среду. В идеале $ SDIST_CACHE будет осуществляться под вашим контролем источника. При развертывании на производство вы будете запускать только вторую команду pip для установки пакетов без их загрузки.

    Начиная с версии 6.0 , pip теперь делает свое собственное кэширование:

    • DEPRECATION pip install --download-cache и pip wheel --download-cache флаги командной строки устарели и функциональность удалена. Поскольку pip теперь автоматически настраивает и использует внутренний HTTP-кеш, который вытесняет --download-cache существующие опции были сделаны не функциональными, но все равно будут приняты до их удаления в pip v8.0. Для получения дополнительной информации см. https://pip.pypa.io/en/latest/reference/pip_install.html#caching

    Дополнительная информация по вышеуказанной ссылке :

    Начиная с v6.0, pip обеспечивает кеширование по умолчанию, которое функционирует аналогично тому, как в веб-браузере. Хотя кеш включен по умолчанию и разработан правильно, по умолчанию вы можете отключить кеш и всегда обращаться к PyPI, используя параметр --no-cache-dir .

    pip wheel – отличный вариант, который делает то, что вы хотите, с дополнительной функцией предварительной компиляции пакетов. Из официальных документов :

    Построить колеса для требования (и всех его зависимостей):

    $ pip wheel --wheel-dir=/tmp/wheelhouse SomePackage

    Теперь ваш каталог /tmp/wheelhouse содержит все ваши зависимости, предварительно скопированные, поэтому вы можете скопировать папку на другой сервер и установить все с помощью этой команды:

    $ pip install --no-index --find-links=/tmp/wheelhouse SomePackage

    Обратите внимание, что не все пакеты будут полностью переносимы между машинами. Некоторые пакеты будут созданы специально для версии Python, дистрибутива ОС и / или аппаратной архитектуры, которые вы используете. Это будет указано в имени файла, например -cp27-none-linux_x86_64 для CPython 2.7 на 64-разрядной Linux и т. Д.

    Используя только pip (моя версия 1.2.1), вы также можете создать локальный repository следующим образом:

     if ! pip install --find-links="file://$PIP_SDIST_INDEX" --no-index ; then pip install --download-directory="$PIP_SDIST_INDEX"  pip install --find-links="file://$PIP_SDIST_INDEX" --no-index  fi 

    В первом вызове pip пакеты из файла требований просматриваются в локальном репозитории (только), а затем устанавливаются оттуда. Если это не удается, pip извлекает пакеты из своего обычного местоположения (например, PyPI) и загружает его в PIP_SDIST_INDEX (но ничего не устанавливает!). Первый вызов «повторен» для правильной установки пакета из локального индекса.

    ( --download-cache создает имя локального файла, который является полным (экранированным) URL-адресом, а pip не может использовать это как индекс с --find-links . --download-cache будет использовать кешированный файл, если он найден. может добавить эту опцию ко второму вызову pip, но поскольку индекс уже функционирует как своего рода кеш, это не обязательно приносит много. Это помогло бы, например, если ваш индекс опустел.)

    Более простой вариант – basket .

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

    Затем вы можете использовать этот каталог в качестве источника для pip :

     pip install --no-index -f file:///path/to/basket package 

    Или easy_install :

     easy_install -f ~/path/to/basket -H None package 

    Вы также можете использовать его для обновления корзины всякий раз, когда вы в сети.

    Существует новое решение для этого, называемое pip-accel , замена для pip с встроенным кэшированием.

    Программа pip-accel – это shell для pip, менеджера пакетов Python. Это ускоряет использование pip для инициализации виртуальных сред Python с учетом одного или нескольких файлов требований. Он делает это, комбинируя следующие два подхода:

    • Загрузка исходного дистрибутива кэшируется и используется для создания локального индекса исходных архивов распространения.

    • Бинарные дистрибутивы используются для ускорения процесса установки зависимостей с бинарными компонентами (например, M2Crypto и LXML). Вместо повторной компиляции этих зависимостей для каждой виртуальной среды мы их компилируем один раз и кэшем результат как бинарный * .tar.gz дистрибутив.

    Paylogic использует pip-accel для быстрой и надежной инициализации виртуальных сред на своей ферме непрерывных интегральных ведомых, которые постоянно запускают модульные тесты (это был один из первоначальных вариантов использования, для которых был разработан pip-accel). Мы также используем его на наших серверах сборки.

    Мы видели около 10-кратного ускорения перехода от pip к pip-accel .

    Я думаю, что пакет «pip-accel» должен быть хорошим выбором.

    Interesting Posts

    Функция для динамического выделения матрицы

    Является ли рекурсивный-итеративный метод лучше, чем чисто итеративный метод, чтобы выяснить, является ли число простым?

    Unity EventManager с делегатом вместо UnityEvent

    Caps Lock сопоставляется с Shift

    Удалить категорию и базу тегов из URL-адреса WordPress – без плагина

    Общие ограничения, где T: struct и где T: class

    Есть ли способ отключить некоторые быстрые клавиши в Windows 7?

    Удаление символической ссылки папки Ubuntu удаляет содержимое целевой папки, когда выполняется через OSX & Samba

    Терминология HAS-A, IS-A в объектно-ориентированном языке

    Как создать дерево выражений LINQ, чтобы выбрать анонимный тип

    Можно ли создавать модели django из базы данных?

    Инъекция зависимости: Черепахи полностью вниз?

    Должен ли я использовать int или Int32

    Как выбрать конкретный параметр в элементе SELECT в jQuery?

    Сравнение строк с ==, которые объявлены окончательными в Java

    Давайте будем гением компьютера.