Есть ли способ настроить 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
.)
-
загрузите exe-форму пакета из pypi, например:
$wget https://pypi.python.org/packages/2.7/l/lxml/lxml-3.2.3.win32-py2.7.exe#md5=14ab978b7f0a3382719b65a1ca938d33 $ dir LXML-3.2.3.win32-py2.7.exe
-
преобразуйте его в
whl
$wheel convert lxml-3.2.3.win32-py2.7.exe $ dir LXML-3.2.3.win32-py2.7.exe LXML-3.2.3-cp27-ни-win32.whl
-
Проверьте это:
$pip install lxml
или
$ 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.
К сожалению, формат колеса в этом случае не поддерживается (насколько мне известно).