python dependencies

49
IT Talk #32 IT Talk #32

Upload: ivan-kolodyazhny

Post on 27-Jul-2015

132 views

Category:

Software


3 download

TRANSCRIPT

IT Talk #32

IT Talk #32

IT Talk #32

IT Talk #17 октября 2014

Колодяжный Иван

Управление зависимостями в Python:

почему универсального решения нет и как мы с этим боремся

IT Talk #32

• Доклад построен на реальном опыте. Все совпадения с реальными проектами считаются случайностями. При подготовке доклада ни один пакет не пострадал ;)

IT Talk #32

О чем поговорим?

• Проблема:– разные компоненты требуют разные версии

зависимостей

IT Talk #32

О чем поговорим?

• Проблема:– разные компоненты требуют разные версии

зависимостей:– Сервис А: SQLAlchemy<=0.8.99– Сервис Б: SQLAlchemy>=0.9.7

IT Talk #32

О чем поговорим?

• Проблема:– разные компоненты требуют разные версии

зависимостей– управление пакетами: установка, обновление и

удаление

IT Talk #32

О чем поговорим?

• Проблема:– разные компоненты требуют разные версии

зависимостей– управление пакетами: установка, обновление и

удаление

• Решение:– изоляция компонентов– управление зависимостями

IT Talk #32

А также:

• Pip vs RPM/DEB– Разработчики vs админы

• Virtualenv - не панацея,Docker - тем болееVM - overhead!

• Серебряной пули нет!

IT Talk #32

А теперь подробнее

IT Talk #32

Изоляция зависимостей

• Virtualenv• Docker• VMs

IT Talk #32

Изоляция зависимостей

• Virtualenv• Docker• VMs

• Dev/Test/Stage• Production

IT Talk #32

Начинаем изолировать код

• Сначала Virtualenv– изолируем python-код

IT Talk #32

Начинаем изолировать код

• Сначала Virtualenv– изолируем python-код

• Потом Docker– изоляция C-ых расширений и библиотек

IT Talk #32

Начинаем изолировать код

• Сначала Virtualenv– изолируем python-код

• Потом Docker– изоляция C-ых расширений и библиотек

• Потом Virtual Machine– а если нам нужно другое ядро?

IT Talk #32

Virtualenv: без фанатизма• Отлично работает в dev-окружении• (ну не считая моей проблемы на mac:( )

IT Talk #32

Virtualenv: без фанатизма• Отлично работает в dev-окружении• (ну не считая моей проблемы на mac:( )

• успешно работает в production на проектах разных размеров

IT Talk #32

Virtualenv: без фанатизма• Отлично работает в dev-окружении• (ну не считая моей проблемы на mac:( )

• успешно работает в production на проектах разных размеров

• 1) не решает проблему с зависимостями• 2) прячет ее на потом• 3) потом может не наступить• если “потом” наступило - см №1 :)

IT Talk #32

Docker

• “Полноценная” ОС с минимумом накладных расходов

• С-расширения разных версий– а нужно ли?

• разные версии системных библиотек

IT Talk #32

VM

• Крайний случай, очень редко когда нужно– контейнеров хватает в 80%

IT Talk #32

VM

• Крайний случай, очень редко когда нужно– контейнеров хватает в 80%

• Docker++– теперь у нас может быть другая ОС и другое

ядро

IT Talk #32

Управление зависимостями

IT Talk #32

Python vs OS package

IT Talk #32

Python vs OS package

1. Религия

IT Talk #32

Python vs OS package

1. Религия2. Постоянные споры разработчиков и

администраторов• разработчики используют pip• админы yum/aptitude/и т.д.

IT Talk #32

Python packages: что под капотом?

• setup.py• setup.cfg• PEP-314, PEP-426• код и другие файлы• все.

IT Talk #32

python setup.py install• Distutils

• Setuptools

• Distribute

• Distutils2

• Distlib

• Bento

• pbr

• pip

IT Talk #32

Установка python пакета

• “Простое копирование файлов”• Код• /usr/lib/python2.x/{site,dist}-packages

• Данные• /usr/….

• Конфиги• /etc/

• Документация• /usr/share/man

IT Talk #32

Установка python пакета

• “Простое копирование файлов”• Код• /usr/lib/python2.x/{site,dist}-packages/package-name

• Данные• /usr/….

• Конфиги• /etc/

• Документация• /usr/share/man

IT Talk #32

Установка python пакета

• “Простое копирование файлов”• Код• /usr/lib/python2.x/{site,dist}-packages/package-name-ver

• Данные• /usr/….

• Конфиги• /etc/

• Документация• /usr/share/man

IT Talk #32

pip

• “It’s a tool for installing and managing Python packages.”

• Аналог yum, aptitude, и т.д.

IT Talk #32

Pip: за и против

• За:– простота– pypi– “родное” для python

IT Talk #32

Pip: набор батареек

IT Talk #32

requirements.txt

• Список зависимостей с указанием версий– порядок имеет значение!

• Зеркало с пакетами• Поддержка Git/Mercurial/SVN• Архивы и директории

IT Talk #32

pip: но есть и минусы

IT Talk #32

• Пакеты зависят от определенных версий библиотек

IT Talk #32

• Пакеты зависят от определенных версий библиотек

• Установить 2 версии можно, но

IT Talk #32

• Пакеты зависят от определенных версий библиотек

• Установить 2 версии можно, но• С этим нужно уметь и работать• А уже есть много написанного кода…

IT Talk #32

• Пакеты зависят от определенных версий библиотек

• Установить 2 версии можно, но• С этим нужно уметь и работать• А уже есть много написанного кода…• Иногда, пакеты удаляют…

IT Talk #32

RPM/DEB: за и против

• Привычный способ для админов устанавливать что-либо

• Поддержка из коробки Puppet/Chef– есть официальный рецепт для pip

IT Talk #32

RPM/DEB: за и против

• Привычный способ для админов устанавливать что-либо

• Поддержка из коробки Puppet/Chef– есть официальный рецепт для pip

• Полный контроль за установленными файлами

IT Talk #32

RPM/DEB: за и против

• Полный контроль за установленными файлами– конфликты при установке– “корректное” обновление– нет проблем с удаленными зависимостями– каждый файл принадлежит конкретному пакету

IT Talk #32

RPM/DEB: за и против

• Публичные репозитории не содержат актуальных версий пакетов

• приходится держать свои зеркала• собрать пакет == собрать все зависимости– зависимостей может быть много– их нужно правильно прописать– тестирование

IT Talk #32

RPM и python

• работает из коробки– python setup.py bdist_rpm– поддержка pre-/post-build events– почти все, что можно в SPEC

IT Talk #32

DEB и python

• не работает из коробки– есть несколько пакетов на PyPI, но все

достаточно старые

IT Talk #32

Подводя итог…

• PIP - простой и удобный способ, но все еще достаточно сырой

IT Talk #32

Подводя итог…

• PIP - простой и удобный способ, но все еще достаточно сырой

• RPM/DEB-пакеты - часто получается очень долго и дорого

IT Talk #32

Подводя итог…

• PIP - простой и удобный способ, но все еще достаточно сырой

• RPM/DEB-пакеты - часто получается очень долго и дорого

• virtualenv - выглядит хорошим комормисом

IT Talk #32

Немного ссылок

• http://stackoverflow.com/questions/6344076/differences-between-distribute-distutils-setuptools-and-distutils2

• https://pip.readthedocs.org/en/latest/• http://legacy.python.org/dev/peps/pep-0314/• http://legacy.python.org/dev/peps/pep-0426/• http://google.com

IT Talk #32

Спасибо. Вопросы?Skype: e0ne-userBlog: http://blog.e0ne.info/

E-mail: [email protected]: @e0ne