Как установить из локального кэша с помощью pip?



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



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

705   10  

10 ответов:

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

по словам Pip documentation:

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

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

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

С pip news, версия 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. если обнаружена более новая версия пакета, он будет загружен и добавлен к

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

документы:

pip2pi создает PyPI-совместимый репозиторий пакетов из требований pip

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:

новые версии Pip теперь загружаются в кэш по умолчанию. Смотрите эту документацию:

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

для более старых версий Pip:

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

[global]
download_cache = ~/.cache/pip

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

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

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

два шага в конечном итоге:

pip install --no-install --use-mirrors -I --download=$SDIST_CACHE <package name>

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

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

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

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

  • осуждение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, используя .

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), вы также можете создать локальный репозиторий следующим образом:

if ! pip install --find-links="file://$PIP_SDIST_INDEX" --no-index <package>; then
    pip install --download-directory="$PIP_SDIST_INDEX" <package>
    pip install --find-links="file://$PIP_SDIST_INDEX" --no-index <package>
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-это оболочка для pip, менеджера пакетов Python. Это ускоряет использование pip для инициализации виртуальных сред Python с учетом одного или нескольких файлов требований. Он делает это путем объединения следующих двух подходов:

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

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

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

мы видели около 10x ускорение от переключения с pip до pip-accel.

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

Comments

    Ничего не найдено.