python dependencies
TRANSCRIPT
IT Talk #32
IT Talk #17 октября 2014
Колодяжный Иван
Управление зависимостями в Python:
почему универсального решения нет и как мы с этим боремся
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
Начинаем изолировать код
• Сначала 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%
• Docker++– теперь у нас может быть другая ОС и другое
ядро
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
requirements.txt
• Список зависимостей с указанием версий– порядок имеет значение!
• Зеркало с пакетами• Поддержка Git/Mercurial/SVN• Архивы и директории
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 - простой и удобный способ, но все еще достаточно сырой
• 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