Easy_install кеш скачанных файлов - PullRequest
18 голосов
/ 09 февраля 2009

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

Ответы [ 2 ]

16 голосов
/ 11 февраля 2009

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

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

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

13 голосов
/ 30 августа 2013

Вот мое решение, использующее 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. Это легко получить (без особой осторожности), но обратите внимание, что с точки зрения пипа, это просто кэшированные данные, загруженные из PyPi, а не из пакетов, поэтому, если вы используете опцию --no-index, она не будет работа.

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

packages dir - это место для размещения файлов реального пакета. Например. для моей любимой посылки 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 в прошлом - для установки требуется несколько библиотек в системе):

$ pip wheel lxml

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

С тех пор

$ pip install lxml

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

$ pip install --no-index lxml

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

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

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

  1. скачайте 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

  2. преобразовать его в 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

  3. Проверьте это:

    $ pip install lxml

или

$ pip install --no-index lxml

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

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

Позвольте 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.

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

...