SlideShare a Scribd company logo
IT Talk #32
IT Talk #32
1
IT Talk #32
IT Talk #
17 октября 2014
Колодяжный Иван
2
Управление зависимостями в
Python:
почему универсального решения
нет и как мы с этим боремся
IT Talk #32
• Доклад построен на реальном опыте. Все
совпадения с реальными проектами считаются
случайностями. При подготовке доклада ни один
пакет не пострадал ;)
3
IT Talk #32
О чем поговорим?
• Проблема:
– разные компоненты требуют разные версии
зависимостей
4
IT Talk #32
О чем поговорим?
• Проблема:
– разные компоненты требуют разные версии
зависимостей:
– Сервис А: SQLAlchemy<=0.8.99
– Сервис Б: SQLAlchemy>=0.9.7
5
IT Talk #32
О чем поговорим?
• Проблема:
– разные компоненты требуют разные версии
зависимостей
– управление пакетами: установка, обновление и
удаление
6
IT Talk #32
О чем поговорим?
• Проблема:
– разные компоненты требуют разные версии
зависимостей
– управление пакетами: установка, обновление и
удаление
• Решение:
– изоляция компонентов
– управление зависимостями
7
IT Talk #32
А также:
• Pip vs RPM/DEB
– Разработчики vs админы
• Virtualenv - не панацея,
Docker - тем более
VM - overhead!
• Серебряной пули нет!
8
IT Talk #32
А теперь подробнее
9
IT Talk #32
Изоляция зависимостей
• Virtualenv
• Docker
• VMs
10
IT Talk #32
Изоляция зависимостей
• Virtualenv
• Docker
• VMs
• Dev/Test/Stage
• Production
11
IT Talk #32
Начинаем изолировать код
• Сначала Virtualenv
– изолируем python-код
12
IT Talk #32
Начинаем изолировать код
• Сначала Virtualenv
– изолируем python-код
• Потом Docker
– изоляция C-ых расширений и библиотек
13
IT Talk #32
Начинаем изолировать код
• Сначала Virtualenv
– изолируем python-код
• Потом Docker
– изоляция C-ых расширений и библиотек
• Потом Virtual Machine
– а если нам нужно другое ядро?
14
IT Talk #32
Virtualenv: без фанатизма
• Отлично работает в dev-окружении
• (ну не считая моей проблемы на mac:( )
15
IT Talk #32
Virtualenv: без фанатизма
• Отлично работает в dev-окружении
• (ну не считая моей проблемы на mac:( )
• успешно работает в production на проектах
разных размеров
16
IT Talk #32
Virtualenv: без фанатизма
• Отлично работает в dev-окружении
• (ну не считая моей проблемы на mac:( )
• успешно работает в production на проектах
разных размеров
• 1) не решает проблему с зависимостями
• 2) прячет ее на потом
• 3) потом может не наступить
• если “потом” наступило - см №1 :)
17
IT Talk #32
Docker
• “Полноценная” ОС с минимумом накладных
расходов
• С-расширения разных версий
– а нужно ли?
• разные версии системных библиотек
18
IT Talk #32
VM
• Крайний случай, очень редко когда нужно
– контейнеров хватает в 80%
19
IT Talk #32
VM
• Крайний случай, очень редко когда нужно
– контейнеров хватает в 80%
• Docker++
– теперь у нас может быть другая ОС и другое
ядро
20
IT Talk #32
Управление зависимостями
21
IT Talk #32
Python vs OS package
22
IT Talk #32
Python vs OS package
1. Религия
23
IT Talk #32
Python vs OS package
1. Религия
2. Постоянные споры разработчиков и
администраторов
• разработчики используют pip
• админы yum/aptitude/и т.д.
24
IT Talk #32
Python packages: что под
капотом?
• setup.py
• setup.cfg
• PEP-314, PEP-426
• код и другие файлы
• все.
25
IT Talk #32
python setup.py install
• Distutils
• Setuptools
• Distribute
• Distutils2
• Distlib
• Bento
• pbr
• pip
26
IT Talk #32
Установка python пакета
• “Простое копирование файлов”
• Код
• /usr/lib/python2.x/{site,dist}-packages
• Данные
• /usr/….
• Конфиги
• /etc/
• Документация
• /usr/share/man
27
IT Talk #32
Установка python пакета
• “Простое копирование файлов”
• Код
• /usr/lib/python2.x/{site,dist}-packages/package-name
• Данные
• /usr/….
• Конфиги
• /etc/
• Документация
• /usr/share/man
28
IT Talk #32
Установка python пакета
• “Простое копирование файлов”
• Код
• /usr/lib/python2.x/{site,dist}-packages/package-name-ver
• Данные
• /usr/….
• Конфиги
• /etc/
• Документация
• /usr/share/man
29
IT Talk #32
pip
• “It’s a tool for installing and managing Python
packages.”
• Аналог yum, aptitude, и т.д.
30
IT Talk #32
Pip: за и против
• За:
– простота
– pypi
– “родное” для python
31
IT Talk #32
Pip: набор батареек
32
IT Talk #32
requirements.txt
• Список зависимостей с указанием версий
– порядок имеет значение!
• Зеркало с пакетами
• Поддержка Git/Mercurial/SVN
• Архивы и директории
33
IT Talk #32
pip: но есть и минусы
34
IT Talk #32
• Пакеты зависят от определенных версий
библиотек
35
IT Talk #32
• Пакеты зависят от определенных версий
библиотек
• Установить 2 версии можно, но
36
IT Talk #32
• Пакеты зависят от определенных версий
библиотек
• Установить 2 версии можно, но
• С этим нужно уметь и работать
• А уже есть много написанного кода…
37
IT Talk #32
• Пакеты зависят от определенных версий
библиотек
• Установить 2 версии можно, но
• С этим нужно уметь и работать
• А уже есть много написанного кода…
• Иногда, пакеты удаляют…
38
IT Talk #32
RPM/DEB: за и против
• Привычный способ для админов
устанавливать что-либо
• Поддержка из коробки Puppet/Chef
– есть официальный рецепт для pip
39
IT Talk #32
RPM/DEB: за и против
• Привычный способ для админов
устанавливать что-либо
• Поддержка из коробки Puppet/Chef
– есть официальный рецепт для pip
• Полный контроль за установленными
файлами
40
IT Talk #32
RPM/DEB: за и против
• Полный контроль за установленными
файлами
– конфликты при установке
– “корректное” обновление
– нет проблем с удаленными зависимостями
– каждый файл принадлежит конкретному пакету
41
IT Talk #32
RPM/DEB: за и против
• Публичные репозитории не содержат
актуальных версий пакетов
• приходится держать свои зеркала
• собрать пакет == собрать все зависимости
– зависимостей может быть много
– их нужно правильно прописать
– тестирование
42
IT Talk #32
RPM и python
• работает из коробки
– python setup.py bdist_rpm
– поддержка pre-/post-build events
– почти все, что можно в SPEC
43
IT Talk #32
DEB и python
• не работает из коробки
– есть несколько пакетов на PyPI, но все
достаточно старые
44
IT Talk #32
Подводя итог…
• PIP - простой и удобный способ, но все еще
достаточно сырой
45
IT Talk #32
Подводя итог…
• PIP - простой и удобный способ, но все еще
достаточно сырой
• RPM/DEB-пакеты - часто получается очень
долго и дорого
46
IT Talk #32
Подводя итог…
• PIP - простой и удобный способ, но все еще
достаточно сырой
• RPM/DEB-пакеты - часто получается очень
долго и дорого
• virtualenv - выглядит хорошим комормисом
47
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
48
IT Talk #32
Спасибо. Вопросы?
Skype: e0ne-user
Blog: http://blog.e0ne.info/
E-mail: e0ne@e0ne.info
Twitter: @e0ne

More Related Content

What's hot

Ross2013 rubanov
Ross2013 rubanovRoss2013 rubanov
Ross2013 rubanovRosaLab
 
Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)
Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)
Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)
Ontico
 
"Разработка документации на программные интерфейсы". Светлана Каюшина, Яндекс
"Разработка документации на программные интерфейсы". Светлана Каюшина, Яндекс"Разработка документации на программные интерфейсы". Светлана Каюшина, Яндекс
"Разработка документации на программные интерфейсы". Светлана Каюшина, Яндекс
Yandex
 
Net framework
Net frameworkNet framework
Net framework
poverhnost
 
Мифы и легенды о проекте OpenVZ
Мифы и легенды о проекте OpenVZМифы и легенды о проекте OpenVZ
Мифы и легенды о проекте OpenVZ
OpenVZ
 
CI: Автоматизация сборки, развёртывания и тестирования
CI: Автоматизация сборки, развёртывания и тестированияCI: Автоматизация сборки, развёртывания и тестирования
CI: Автоматизация сборки, развёртывания и тестирования
SQALab
 
Rozum robotics release cycle
Rozum robotics release cycleRozum robotics release cycle
Rozum robotics release cycle
Nikolay Lagutko
 
Двухкратный публичный code review, Евгения Фирсова (Яндекс)
Двухкратный публичный code review, Евгения Фирсова (Яндекс)Двухкратный публичный code review, Евгения Фирсова (Яндекс)
Двухкратный публичный code review, Евгения Фирсова (Яндекс)Ontico
 
Git для начинающих
Git для начинающихGit для начинающих
Git для начинающих
Vadim Drobinin
 
Controlul versiunilor
Controlul versiunilor Controlul versiunilor
Controlul versiunilor
Dmitrii Stoian
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практике
Denis Tuchin
 
Приступаем к разработке Android приложений
Приступаем к разработке Android приложенийПриступаем к разработке Android приложений
Приступаем к разработке Android приложений
metaform
 

What's hot (12)

Ross2013 rubanov
Ross2013 rubanovRoss2013 rubanov
Ross2013 rubanov
 
Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)
Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)
Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)
 
"Разработка документации на программные интерфейсы". Светлана Каюшина, Яндекс
"Разработка документации на программные интерфейсы". Светлана Каюшина, Яндекс"Разработка документации на программные интерфейсы". Светлана Каюшина, Яндекс
"Разработка документации на программные интерфейсы". Светлана Каюшина, Яндекс
 
Net framework
Net frameworkNet framework
Net framework
 
Мифы и легенды о проекте OpenVZ
Мифы и легенды о проекте OpenVZМифы и легенды о проекте OpenVZ
Мифы и легенды о проекте OpenVZ
 
CI: Автоматизация сборки, развёртывания и тестирования
CI: Автоматизация сборки, развёртывания и тестированияCI: Автоматизация сборки, развёртывания и тестирования
CI: Автоматизация сборки, развёртывания и тестирования
 
Rozum robotics release cycle
Rozum robotics release cycleRozum robotics release cycle
Rozum robotics release cycle
 
Двухкратный публичный code review, Евгения Фирсова (Яндекс)
Двухкратный публичный code review, Евгения Фирсова (Яндекс)Двухкратный публичный code review, Евгения Фирсова (Яндекс)
Двухкратный публичный code review, Евгения Фирсова (Яндекс)
 
Git для начинающих
Git для начинающихGit для начинающих
Git для начинающих
 
Controlul versiunilor
Controlul versiunilor Controlul versiunilor
Controlul versiunilor
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практике
 
Приступаем к разработке Android приложений
Приступаем к разработке Android приложенийПриступаем к разработке Android приложений
Приступаем к разработке Android приложений
 

Similar to Python dependencies

Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтенда
Roman Dvornov
 
Как не подавиться большим старым проектом
Как не подавиться большим старым проектомКак не подавиться большим старым проектом
Как не подавиться большим старым проектом
Andrey Karpov
 
Стажировка-2013, разработчики, занятие 10. Git
Стажировка-2013, разработчики, занятие 10. GitСтажировка-2013, разработчики, занятие 10. Git
Стажировка-2013, разработчики, занятие 10. Git7bits
 
Практика разработки веб-серверов на Rust
Практика разработки веб-серверов на RustПрактика разработки веб-серверов на Rust
Практика разработки веб-серверов на Rust
Michael Pankov
 
Инструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release NotesИнструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release Notes
Positive Hack Days
 
Мой Python всегда со мной!
Мой Python всегда со мной!Мой Python всегда со мной!
Мой Python всегда со мной!
PyNSK
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»
Yandex
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"
Yandex
 
Выбираем стратегию создания бранчей
Выбираем стратегию создания бранчейВыбираем стратегию создания бранчей
Выбираем стратегию создания бранчей
Vitebsk DSC
 
Enter: code style
Enter: code styleEnter: code style
Enter: code style
Kamil Samigullin
 
Puppet development kit and best practices
Puppet development kit and best practicesPuppet development kit and best practices
Puppet development kit and best practices
Igor Kurochkin
 
Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)
Vladimir Bakhov
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
Anatoly Popov
 
01 linux-course
01 linux-course01 linux-course
01 linux-course
Vikentsi Lapa
 
Как мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerКак мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows Docker
Positive Hack Days
 
что такое Git и как с ним бороться
что такое Git и как с ним боротьсячто такое Git и как с ним бороться
что такое Git и как с ним боротьсяВладимир Кожаев
 
Учебный день конференции HighLoad++ 2013
Учебный день конференции HighLoad++ 2013Учебный день конференции HighLoad++ 2013
Учебный день конференции HighLoad++ 2013
Ontico
 
Алексей Лустин. Непрерывная проверка качества кода.
Алексей Лустин. Непрерывная проверка качества кода.Алексей Лустин. Непрерывная проверка качества кода.
Алексей Лустин. Непрерывная проверка качества кода.
ScrumTrek
 
Шаблоны контейнеров в Virtuozzo
Шаблоны контейнеров в VirtuozzoШаблоны контейнеров в Virtuozzo
Шаблоны контейнеров в Virtuozzo
CEE-SEC(R)
 

Similar to Python dependencies (20)

Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтенда
 
Как не подавиться большим старым проектом
Как не подавиться большим старым проектомКак не подавиться большим старым проектом
Как не подавиться большим старым проектом
 
Стажировка-2013, разработчики, занятие 10. Git
Стажировка-2013, разработчики, занятие 10. GitСтажировка-2013, разработчики, занятие 10. Git
Стажировка-2013, разработчики, занятие 10. Git
 
Практика разработки веб-серверов на Rust
Практика разработки веб-серверов на RustПрактика разработки веб-серверов на Rust
Практика разработки веб-серверов на Rust
 
Инструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release NotesИнструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release Notes
 
Мой Python всегда со мной!
Мой Python всегда со мной!Мой Python всегда со мной!
Мой Python всегда со мной!
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"
 
Выбираем стратегию создания бранчей
Выбираем стратегию создания бранчейВыбираем стратегию создания бранчей
Выбираем стратегию создания бранчей
 
Gitlab devconf
Gitlab devconfGitlab devconf
Gitlab devconf
 
Enter: code style
Enter: code styleEnter: code style
Enter: code style
 
Puppet development kit and best practices
Puppet development kit and best practicesPuppet development kit and best practices
Puppet development kit and best practices
 
Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
 
01 linux-course
01 linux-course01 linux-course
01 linux-course
 
Как мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerКак мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows Docker
 
что такое Git и как с ним бороться
что такое Git и как с ним боротьсячто такое Git и как с ним бороться
что такое Git и как с ним бороться
 
Учебный день конференции HighLoad++ 2013
Учебный день конференции HighLoad++ 2013Учебный день конференции HighLoad++ 2013
Учебный день конференции HighLoad++ 2013
 
Алексей Лустин. Непрерывная проверка качества кода.
Алексей Лустин. Непрерывная проверка качества кода.Алексей Лустин. Непрерывная проверка качества кода.
Алексей Лустин. Непрерывная проверка качества кода.
 
Шаблоны контейнеров в Virtuozzo
Шаблоны контейнеров в VirtuozzoШаблоны контейнеров в Virtuozzo
Шаблоны контейнеров в Virtuozzo
 

More from Ivan Kolodyazhny

Continuous Integration для QA
Continuous Integration для QAContinuous Integration для QA
Continuous Integration для QA
Ivan Kolodyazhny
 
Логирование в Python: то, о чем не пишут в документации
Логирование в Python: то, о чем не пишут в документацииЛогирование в Python: то, о чем не пишут в документации
Логирование в Python: то, о чем не пишут в документацииIvan Kolodyazhny
 
Private Clouds and OpenStack: WFT?
Private Clouds and OpenStack: WFT?Private Clouds and OpenStack: WFT?
Private Clouds and OpenStack: WFT?Ivan Kolodyazhny
 
Cross Site Scripting aka XSS: Начало
Cross Site Scripting aka XSS: НачалоCross Site Scripting aka XSS: Начало
Cross Site Scripting aka XSS: НачалоIvan Kolodyazhny
 
Django: инструкция по применению
Django: инструкция по применениюDjango: инструкция по применению
Django: инструкция по применениюIvan Kolodyazhny
 

More from Ivan Kolodyazhny (6)

Continuous Integration для QA
Continuous Integration для QAContinuous Integration для QA
Continuous Integration для QA
 
Логирование в Python: то, о чем не пишут в документации
Логирование в Python: то, о чем не пишут в документацииЛогирование в Python: то, о чем не пишут в документации
Логирование в Python: то, о чем не пишут в документации
 
Private Clouds and OpenStack: WFT?
Private Clouds and OpenStack: WFT?Private Clouds and OpenStack: WFT?
Private Clouds and OpenStack: WFT?
 
DneprPy #0: Openstack
DneprPy #0: OpenstackDneprPy #0: Openstack
DneprPy #0: Openstack
 
Cross Site Scripting aka XSS: Начало
Cross Site Scripting aka XSS: НачалоCross Site Scripting aka XSS: Начало
Cross Site Scripting aka XSS: Начало
 
Django: инструкция по применению
Django: инструкция по применениюDjango: инструкция по применению
Django: инструкция по применению
 

Python dependencies

  • 1. IT Talk #32 IT Talk #32 1
  • 2. IT Talk #32 IT Talk # 17 октября 2014 Колодяжный Иван 2 Управление зависимостями в Python: почему универсального решения нет и как мы с этим боремся
  • 3. IT Talk #32 • Доклад построен на реальном опыте. Все совпадения с реальными проектами считаются случайностями. При подготовке доклада ни один пакет не пострадал ;) 3
  • 4. IT Talk #32 О чем поговорим? • Проблема: – разные компоненты требуют разные версии зависимостей 4
  • 5. IT Talk #32 О чем поговорим? • Проблема: – разные компоненты требуют разные версии зависимостей: – Сервис А: SQLAlchemy<=0.8.99 – Сервис Б: SQLAlchemy>=0.9.7 5
  • 6. IT Talk #32 О чем поговорим? • Проблема: – разные компоненты требуют разные версии зависимостей – управление пакетами: установка, обновление и удаление 6
  • 7. IT Talk #32 О чем поговорим? • Проблема: – разные компоненты требуют разные версии зависимостей – управление пакетами: установка, обновление и удаление • Решение: – изоляция компонентов – управление зависимостями 7
  • 8. IT Talk #32 А также: • Pip vs RPM/DEB – Разработчики vs админы • Virtualenv - не панацея, Docker - тем более VM - overhead! • Серебряной пули нет! 8
  • 9. IT Talk #32 А теперь подробнее 9
  • 10. IT Talk #32 Изоляция зависимостей • Virtualenv • Docker • VMs 10
  • 11. IT Talk #32 Изоляция зависимостей • Virtualenv • Docker • VMs • Dev/Test/Stage • Production 11
  • 12. IT Talk #32 Начинаем изолировать код • Сначала Virtualenv – изолируем python-код 12
  • 13. IT Talk #32 Начинаем изолировать код • Сначала Virtualenv – изолируем python-код • Потом Docker – изоляция C-ых расширений и библиотек 13
  • 14. IT Talk #32 Начинаем изолировать код • Сначала Virtualenv – изолируем python-код • Потом Docker – изоляция C-ых расширений и библиотек • Потом Virtual Machine – а если нам нужно другое ядро? 14
  • 15. IT Talk #32 Virtualenv: без фанатизма • Отлично работает в dev-окружении • (ну не считая моей проблемы на mac:( ) 15
  • 16. IT Talk #32 Virtualenv: без фанатизма • Отлично работает в dev-окружении • (ну не считая моей проблемы на mac:( ) • успешно работает в production на проектах разных размеров 16
  • 17. IT Talk #32 Virtualenv: без фанатизма • Отлично работает в dev-окружении • (ну не считая моей проблемы на mac:( ) • успешно работает в production на проектах разных размеров • 1) не решает проблему с зависимостями • 2) прячет ее на потом • 3) потом может не наступить • если “потом” наступило - см №1 :) 17
  • 18. IT Talk #32 Docker • “Полноценная” ОС с минимумом накладных расходов • С-расширения разных версий – а нужно ли? • разные версии системных библиотек 18
  • 19. IT Talk #32 VM • Крайний случай, очень редко когда нужно – контейнеров хватает в 80% 19
  • 20. IT Talk #32 VM • Крайний случай, очень редко когда нужно – контейнеров хватает в 80% • Docker++ – теперь у нас может быть другая ОС и другое ядро 20
  • 21. IT Talk #32 Управление зависимостями 21
  • 22. IT Talk #32 Python vs OS package 22
  • 23. IT Talk #32 Python vs OS package 1. Религия 23
  • 24. IT Talk #32 Python vs OS package 1. Религия 2. Постоянные споры разработчиков и администраторов • разработчики используют pip • админы yum/aptitude/и т.д. 24
  • 25. IT Talk #32 Python packages: что под капотом? • setup.py • setup.cfg • PEP-314, PEP-426 • код и другие файлы • все. 25
  • 26. IT Talk #32 python setup.py install • Distutils • Setuptools • Distribute • Distutils2 • Distlib • Bento • pbr • pip 26
  • 27. IT Talk #32 Установка python пакета • “Простое копирование файлов” • Код • /usr/lib/python2.x/{site,dist}-packages • Данные • /usr/…. • Конфиги • /etc/ • Документация • /usr/share/man 27
  • 28. IT Talk #32 Установка python пакета • “Простое копирование файлов” • Код • /usr/lib/python2.x/{site,dist}-packages/package-name • Данные • /usr/…. • Конфиги • /etc/ • Документация • /usr/share/man 28
  • 29. IT Talk #32 Установка python пакета • “Простое копирование файлов” • Код • /usr/lib/python2.x/{site,dist}-packages/package-name-ver • Данные • /usr/…. • Конфиги • /etc/ • Документация • /usr/share/man 29
  • 30. IT Talk #32 pip • “It’s a tool for installing and managing Python packages.” • Аналог yum, aptitude, и т.д. 30
  • 31. IT Talk #32 Pip: за и против • За: – простота – pypi – “родное” для python 31
  • 32. IT Talk #32 Pip: набор батареек 32
  • 33. IT Talk #32 requirements.txt • Список зависимостей с указанием версий – порядок имеет значение! • Зеркало с пакетами • Поддержка Git/Mercurial/SVN • Архивы и директории 33
  • 34. IT Talk #32 pip: но есть и минусы 34
  • 35. IT Talk #32 • Пакеты зависят от определенных версий библиотек 35
  • 36. IT Talk #32 • Пакеты зависят от определенных версий библиотек • Установить 2 версии можно, но 36
  • 37. IT Talk #32 • Пакеты зависят от определенных версий библиотек • Установить 2 версии можно, но • С этим нужно уметь и работать • А уже есть много написанного кода… 37
  • 38. IT Talk #32 • Пакеты зависят от определенных версий библиотек • Установить 2 версии можно, но • С этим нужно уметь и работать • А уже есть много написанного кода… • Иногда, пакеты удаляют… 38
  • 39. IT Talk #32 RPM/DEB: за и против • Привычный способ для админов устанавливать что-либо • Поддержка из коробки Puppet/Chef – есть официальный рецепт для pip 39
  • 40. IT Talk #32 RPM/DEB: за и против • Привычный способ для админов устанавливать что-либо • Поддержка из коробки Puppet/Chef – есть официальный рецепт для pip • Полный контроль за установленными файлами 40
  • 41. IT Talk #32 RPM/DEB: за и против • Полный контроль за установленными файлами – конфликты при установке – “корректное” обновление – нет проблем с удаленными зависимостями – каждый файл принадлежит конкретному пакету 41
  • 42. IT Talk #32 RPM/DEB: за и против • Публичные репозитории не содержат актуальных версий пакетов • приходится держать свои зеркала • собрать пакет == собрать все зависимости – зависимостей может быть много – их нужно правильно прописать – тестирование 42
  • 43. IT Talk #32 RPM и python • работает из коробки – python setup.py bdist_rpm – поддержка pre-/post-build events – почти все, что можно в SPEC 43
  • 44. IT Talk #32 DEB и python • не работает из коробки – есть несколько пакетов на PyPI, но все достаточно старые 44
  • 45. IT Talk #32 Подводя итог… • PIP - простой и удобный способ, но все еще достаточно сырой 45
  • 46. IT Talk #32 Подводя итог… • PIP - простой и удобный способ, но все еще достаточно сырой • RPM/DEB-пакеты - часто получается очень долго и дорого 46
  • 47. IT Talk #32 Подводя итог… • PIP - простой и удобный способ, но все еще достаточно сырой • RPM/DEB-пакеты - часто получается очень долго и дорого • virtualenv - выглядит хорошим комормисом 47
  • 48. 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 48
  • 49. IT Talk #32 Спасибо. Вопросы? Skype: e0ne-user Blog: http://blog.e0ne.info/ E-mail: e0ne@e0ne.info Twitter: @e0ne

Editor's Notes

  1. Test notes
  2. «всем спасибо, все свободны» (с) 