Я устанавливаю много одних и тех же пакетов в разных виртуальных средах. Есть ли способ, которым я могу загрузить пакет один раз, а затем установить pip из локального кеша?
Это уменьшит полосу пропускания и время загрузки.
virtualenv
pip
Мэтью Рэнкин
источник
источник
Ответы:
Обновленный ответ 19-ноя-15
Согласно документации Pip :
Следовательно, обновленный ответ - просто использовать pip со значениями по умолчанию, если вам нужен кеш загрузки.
Оригинальный ответ
Из новостей пипса, версия 0.1.4:
Чтобы воспользоваться этим, я добавил в свой
~/.bash_profile
:или, если у вас Mac:
Примечания
PIP_DOWNLOAD_CACHE
каталог. Например, у меня сейчас довольно много пакетов Django.virtualenvs
в самолете, но все же отлично.источник
На мой взгляд,
pip2pi
это гораздо более элегантное и надежное решение этой проблемы.Из документов:
pip2pi
позволяет создать собственный индекс PyPI с помощью двух простых команд:Чтобы отразить пакет и все его требования, используйте
pip2tgz
:Чтобы создать индекс пакета из предыдущего каталога:
Для установки из индекса, созданного на шаге 2, вы можете просто использовать:
Вы даже можете зеркалировать свой собственный индекс на удаленный хост с помощью
pip2pi
.источник
pip2tgz
определяет, если вы уже загрузили пакет в указанный каталог, поэтому, если вы запустите ту же строку установки или несколько строк установки, которые имеют перекрывающиеся зависимости, он загрузит каждый пакет только один раз.Для более новых версий Pip:
Новые версии Pip теперь по умолчанию кешируют загрузки. См. Эту документацию:
https://pip.pypa.io/en/stable/reference/pip_install/#caching
Для более старых версий Pip:
Создайте файл конфигурации с именем
~/.pip/pip.conf
и добавьте следующее содержимое:В OS X лучше выбрать путь,
~/Library/Caches/pip
поскольку он следует соглашению, которое используют другие программы OS X.источник
pip.conf
сdownload_cache
установкой , что указывает на тот же системный каталог.PIP_DOWNLOAD_CACHE имеет серьезные проблемы. Что наиболее важно, он кодирует имя хоста загрузки в кеш, поэтому использование зеркал становится невозможным.
Лучший способ управлять кешем загрузок pip - отделить шаг «загрузить пакет» от шага «установить пакет». Загруженные файлы обычно называются «файлами sdist» (исходные файлы), и я собираюсь хранить их в каталоге $ SDIST_CACHE.
Два шага заканчиваются:
Это загрузит пакет и поместит его в каталог, на который указывает $ SDIST_CACHE. Пакет не будет установлен. А потом запускаете:
Установить пакет в вашу виртуальную среду. В идеале $ SDIST_CACHE должен быть зафиксирован под вашим контролем версий. При развертывании в производственной среде вы должны запустить только вторую команду pip, чтобы установить пакеты, не загружая их.
источник
Начиная с версии 6.0 ,
pip
теперь есть собственное кеширование:Дополнительная информация по указанной выше ссылке :
источник
pip wheel - отличный вариант, который делает то, что вы хотите, с дополнительной функцией предварительной компиляции пакетов. Из официальных документов :
Теперь в вашем
/tmp/wheelhouse
каталоге все ваши зависимости предварительно скомпилированы, поэтому вы можете скопировать папку на другой сервер и установить все с помощью этой команды:Обратите внимание, что не все пакеты будут полностью переносимы между машинами. Некоторые пакеты будут созданы специально для используемой вами версии Python, дистрибутива ОС и / или аппаратной архитектуры. Это будет указано в имени файла, например,
-cp27-none-linux_x86_64
для CPython 2.7 в 64-битном Linux и т. Д.источник
Используя только pip (моя версия 1.2.1), вы также можете создать локальный репозиторий следующим образом:
При первом вызове pip пакеты из файла требований ищутся в локальном репозитории (только), а затем устанавливаются оттуда. Если это не удается, pip извлекает пакеты из своего обычного местоположения (например, PyPI) и загружает их в
PIP_SDIST_INDEX
(но ничего не устанавливает!). Первый вызов "повторяется" для правильной установки пакета из локального индекса.(
--download-cache
создает локальное имя файла, которое является полным (экранированным) URL-адресом, и pip не может использовать его в качестве индекса с--find-links
.--download-cache
будет использовать кешированный файл, если он найден. Мы могли бы добавить эту опцию во второй вызов pip, но поскольку индекс уже функционирует как своего рода кеш, он не обязательно приносит много. Это поможет, например, если ваш индекс будет очищен.)источник
Вариант попроще
basket
.Получив имя пакета, он загрузит его и все зависимости в центральное расположение; без каких-либо недостатков pip cache. Это отлично подходит для автономного использования.
Затем вы можете использовать этот каталог в качестве источника для
pip
:Или
easy_install
:Вы также можете использовать его для обновления корзины, когда вы в сети.
источник
Для этого есть новое решение, называемое pip-Accel , прямая замена
pip
со встроенным кешированием.Мы видели примерно 10-кратное ускорение при переключении с
pip
наpip-accel
.источник
Думаю, пакет "пип-аксел" должен быть хорошим выбором.
источник