Есть ли способ настроить 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.
К сожалению, формат колеса в этом случае не поддерживается (насколько мне известно).