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