Загруженные файлы кеша Easy_install

Есть ли способ настроить easy_install, чтобы избежать необходимости загружать файлы снова при сбое установки?

Ответ 1

pip (http://pypi.python.org/pypi/pip/) является заменой для инструмента easy_install и может это сделать.

Просто запустите easy_install pip и установите переменную окружения PIP_DOWNLOAD_CACHE на путь, который вы хотите, чтобы сохранить файлы. Обратите внимание, что кеш не будет работать с зависимостями, которые проверяются в репозитории исходного кода (например, svn/ git/hg/bzr).

Затем используйте pip install вместо easy_install

Ответ 2

Вот мое решение, использующее pip, управление даже установкой двоичных пакетов и возможностью использования как на Linux, так и на Windows. И в соответствии с запросом он будет ограничивать загрузку с PyPi до mininum и в качестве дополнительного бонуса в Linux, это позволяет ускорить повторную установку пакетов, обычно требующих компиляции, до доли секунды.

Настройка занимает несколько шагов, но я думаю, что это стоит сделать.

Создать конфигурационный файл pip

Создайте конфигурационный файл pip (в linux: ~/.pip/pip.conf, в Windows% HOME%\pip\pip.ini)

У меня есть этот контент:

[global]
download-cache = /home/javl/.pip/cache
find-links = /home/javl/.pip/packages

[install]
use-wheel = yes

[wheel]
wheel-dir = /home/javl/.pip/packages

Заполнение cache dir - автоматически выполняется

В директории cache будет загружаться кешированная версия данных, загружаемых с pypi каждый раз, pip пытается получить некоторый пакет из pypi. Легко получить его там (никакой особой осторожности не требуется), но обратите внимание, что с точки зрения pip это просто данные, загруженные из PyPi, а не пакеты, поэтому, если вы используете опцию --no-index, она не будет работа.

pip install --download для заполнения packages dir

Директория packages - это место для размещения файлов реальных пакетов. Например. для моего любимого пакета plac, я бы сделал:

$pip install --download ~/.pip/packages plac

и файл пакета plac будет отображаться в этом каталоге. Вы можете даже использовать файл -r requirements.txt для этого для нескольких пакетов одновременно.

Эти пакеты используются даже с $ pip install --no-index <something>.

Предотвращение повторной компиляции одного и того же пакета в Linux

например. Пакет lxml требует усложнения, а загрузка и компиляция могут занять от 45 секунд до нескольких минут. Используя формат колес, вы можете здесь много экономить.

Установите инструмент wheel, если он еще не установлен:

$ pip install wheel

Создайте колесо для lxml (предполагая, что вам удалось установить lxml в прошлом - для этого требуется наличие некоторых libs в системе):

$ pip wheel lxml

Это происходит при загрузке, компиляции, но, наконец, результат в файле lxml whl находится в packgages dir.

С тех пор

$ pip install lxml

или даже быстрее

$ pip install --no-index lxml

займет часть секунды, так как использует пакет с отформатированным колесом.

Подготовьте пакет колес из пакета установки exe окна

(примечание: это может быть подготовлено даже на машине Linux, компиляции нет, только некоторые переупаковываются из exe файла в whl.)

или

$ pip install --no-index lxml

должен быть очень быстрым.

Обратите внимание, что wheel convert может выполнять точно такое же преобразование для пакетов с отформатированными яйцами.

Пусть easy_install и setup.py install повторно используйте packages dir

easy_install и $ python setup.py install, похоже, не предлагают кеш загрузки, но позволяют использовать пакеты, которые у нас есть в нашем каталоге packages.

Для этого отредактируйте файл конфигурации для этих двух инструментов:

В Linux: $HOME/.pydistutils.cfg

В Windows: %HOME%\pydistutils.cfg

В моем случае я здесь, в /home/javl/.pydistutils.cfg:

[easy_install]
find_links = /home/javl/.pip/packages

Этот конфиг может помочь даже в некоторых случаях вызовов pip install, когда pip пытается установить пакет, объявляя зависимость от других. По мере делегирования этой задачи вызову setup.py без конфигурации .pydistutils.cfg он будет загружать файл из PyPi.

К сожалению, формат колеса в этом случае не поддерживается (насколько мне известно).