Как установить из локального кэша с помощью pip?
Я устанавливаю много одинаковых пакетов в разных virtualenv средах. Есть ли способ, что я могу скачать пакет один раз, а затем еще Пип установить из локального кэша?
Это уменьшит пропускную способность и время загрузки.
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Примечания
- если обнаружена более новая версия пакета, он будет загружен и добавлен к
по-моему,
pip2piявляется гораздо более элегантным и надежным решением этой проблемы.документы:
pip2pi создает PyPI-совместимый репозиторий пакетов из требований pip
pip2piпозволяет создать свой собственный индекс PyPI с помощью двух простых команд:
чтобы отразить пакет и все его требования, используйте
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чтобы построить индекс пакета из предыдущего каталога:
$ 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для установки из индекса, который вы построили в шаге 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.
Comments