Про колеса

    Багато хто вже чули про колеса / wheels ; розповідати про них докладно не буду — на Хабре були гарні статті. Опишу покроково один (очевидний) спосіб використання коліс на машині розробника.
 
Всі, хто встановлював пакети начебто numpy або scipy через pip знають, що це довго: компіляція може і десять хвилин зайняти, і двадцять, і тридцять. Середовище для компіляції-то можна налаштувати (ну принаймні під mac і linux це не так складно), але встановлювати такі залежності в кожен virtualenv — те ще задоволення. Можна, звичайно, чай попити. Або віртуаленви не використовувати / використати один загальний.
 
Колеса допомагають вирішити проблему довгої установки. Суть така — пакет збирається / компілюється тільки один раз, потім установка виконується розпакуванням архіву зі скомпілювати файлами. Отже, по кроках:
 
1. Прописуємо в
~/.pip/pip.conf
шлях до папки, де будуть лежати колеса:
 
 
[global]
wheel-dir=/Users/kmike/.wheels
find-links=/Users/kmike/.wheels
; папка /Users/kmike/.wheels должна существовать - pip ее сам не создаст

Якщо файлу
~/.pip/pip.conf
немає, то його можна створити. Під Windows правильний файл іншого —
%HOME%\pip\pip.ini
.
 
2. Встановлюємо пакет wheel, який потрібен для складання коліс (для установки коліс він вже не потрібен):
 
 
$ pip install wheel

3. Збираємо колеса для всіх своїх часто (і нечасто) використовуваних залежностей, наприклад
 
 
$ pip wheel numpy lxml Pillow

Виконувати цю команду можна хоч з віртуаленва, хоч ні, без різниці. Колеса викотяться в папку, вказану в pip.conf.
 
4. Завдяки нашому pip.conf команда «pip install foo» тепер перевірятиме, чи немає для даної версії python вже готового колеса з потрібною версією пакету. Якщо є, то установка буде практично миттєвою. Тепер можна створювати на кожен чих віртуаленви і ставити туди scipy / numpy і т.д.
 
 TL; DR Хочете поставити пакет — замість «pip install foo" пишіть вперше «pip wheel foo; pip install foo », щоб далі команда« pip install foo »виконувалася миттєво. Угу, кеп!
 
Зауваження:
 
1. Цікаво, чи можна в pip зробити це поведінка дефолтних (спочатку закеширувати колесо, потім встановити пакет), щоб писати одну команду замість двох.
2. Приклад з numpy — так собі, тому що для numpy == 1.8.1 під OS X колеса є відразу на pypi. Якщо використовуєте стоковий Python (а не, наприклад, зібраний через brew), то «pip install numpy == 1.8.1» під маком повинно і так швидко спрацювати — ніякої компіляції.
3. Для всього цього потрібно більш-менш свіжий pip.
4. Порівняно зі способом devpi (описаним за посиланням на початку статті) можливостей трохи менше, але зате простіше все виходить — папка з файлами, три строчки в конфіги, ніяких серверів.
5. Передбачається, що pip install foo вже працює. Проблему відсутності компілятора Фортрану при складанні scipy локальний кеш коліс не вирішить.
6. «Pip wheel numpy scipy» може не спрацювати, тому що scipy вимагає встановленого numpy для компіляції. Правильна послідовність — «pip wheel numpy; pip install numpy; pip wheel scipy ».
7. Щоб pip зовсім не ліз в інтернет, а ставив все тільки з локальної папки, можна команді pip install вказувати опцію — no-index.
8. Установка з коліс може бути помітно швидше навіть для чисто пітон пакетів.
9. Вся інформація є в документації до pip.
    
Джерело: Хабрахабр
  • avatar
  • 0

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.