SlideShare une entreprise Scribd logo
1  sur  21
Télécharger pour lire hors ligne
PYENV И PUNDLE
Альтернативный взгляд на работу с зависимостями
PYENV
• большой набор версий python
• автоматически переключает версию,
файл .pyenv-version
• девственный site-packages
• но с самым важным внутри
ПРОБЛЕМЫ МЕНЕДЖМЕНТА
ЗАВИСИМОСТЕЙ
• virtualenv venv
• venv/bin/pip install -r requirements.txt
• venv/bin/python manage.py run
REQUIREMENTS.TXT
• Flask > 0.10
• Какая версия будет в итоге?
• Если прописать Flask == 0.10, какая версия
Werkzeug будет в итоге?
• pip freeze бесполезен
PIP-TOOLS
• pip-compile, ветка future
• requirements.in только нужные пакеты
• requirements.txt с замороженными
зависимостями
• http://nvie.com/posts/better-package-management/
ПРОБЛЕМЫVIRTUALENV
• нет возможности быстро переключать версии
пакетов
• нет простого метода заморозить версии
• много возни ручками при разных версиях пакетов
в разных ветках
• иногда ломается и требует пересборки
А ЧТО СОБСТВЕННО
ДЕЛАЕТVIRTUALENV?
• Если откинуть в сторону все пляски с созданием магической папки,
то в чем соль?
• Мы закидываем пакеты в отдельную папку и импортируем их оттуда
• Каждый проект содержит все пакеты
• Они дублируются
• Их надо ставить отдельно в каждую папку
• Есть много решений как ставить их быстро!
ВСЁ РЕШАЕМО!
pip wheel - действительно ускоряет, но решает
немного не ту проблему.
КАК МОЖНО РЕШИТЬ
ИНАЧЕ?
• можно ставить пакеты в индивидуальные папки,
по версиям пакетов и по версиям
интерпретаторов
• при старте читаем frozen.txt и монтируем
нужные версии пакетов
НУЖНО УПРАВЛЯТЬ
ВЕРСИЯМИ
• читаем requirements.txt, frozen.txt
• если какие-то зависимости отсутствуют во
frozen.txt, вытягиваем максимальную
удовлетворяющую версию и замораживаем
PUNDLE
• управляет версиями
• пакеты лежат в ~/.pundledir
• монтируются при старте import pundle;
pundle.activate()
• ругается, если frozen.txt неактуален
ПРОБЛЕМЫ ПОДХОДА
Всё решаемо конечно
СЛУЧАЙ WERKZEUG
• Pundle надо запуститься перед загрузкой всего остального кода,
например через ‘-c “import pundle; pundle.activate();
exec(open(‘script’).read())”
• автоматический рестарт. Внутри магия, которая пытается воссоздать
командную строку
• python не позволяет достать аргументы к “-c” и прячет их из sys.argv.
Да и вообще стирает на уровне C из orig_argv (ещё раз - orig_argv, orig,
именно, argv).
• можно обойти через usercustomize.py или правкой стартового скрипта
.PTH INSANITY
• Самый частый случай использования это
выполнить что-то при старте интерпретатора
• Класть надо в site-packages
• Нет стандартного механизма
• Часто используют не в разумных целях
SUPERVISOR.RUN
• import subprocess; import run; subprocess.run =
run.run;
ПРОБУЕМ
• берем проект с requirements.txt
• pyenv shell 3.4.1
• pip install pundle
• python -m pundle install
• python -m pundle run script.py
• python -m pundle exec pyflakes

Contenu connexe

Tendances

Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
ITCrowd Almaty
 
обзор средств для тестирования Java script
обзор средств для тестирования Java scriptобзор средств для тестирования Java script
обзор средств для тестирования Java script
Alexey Chumagin
 
Maven как средство сборки проекта
Maven как средство сборки проектаMaven как средство сборки проекта
Maven как средство сборки проекта
Yova Stoika
 
Moscow DevOps meetup 18.05.13
Moscow DevOps meetup 18.05.13Moscow DevOps meetup 18.05.13
Moscow DevOps meetup 18.05.13
Alex Chistyakov
 
Антон Каляев — Быстрое развертывание среды с Vagrant
Антон Каляев — Быстрое развертывание среды с VagrantАнтон Каляев — Быстрое развертывание среды с Vagrant
Антон Каляев — Быстрое развертывание среды с Vagrant
Daria Oreshkina
 
Иван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проектаИван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проекта
Yandex
 
Система управления автоматическими тестами на примере использования Visual St...
Система управления автоматическими тестами на примере использования Visual St...Система управления автоматическими тестами на примере использования Visual St...
Система управления автоматическими тестами на примере использования Visual St...
SQALab
 

Tendances (20)

Разработка CLI с помощью python-cliff
Разработка CLI с помощью python-cliffРазработка CLI с помощью python-cliff
Разработка CLI с помощью python-cliff
 
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
 
What's missing from upstream kernel containers? - Sergey Bronnikov
What's missing from upstream kernel containers? - Sergey BronnikovWhat's missing from upstream kernel containers? - Sergey Bronnikov
What's missing from upstream kernel containers? - Sergey Bronnikov
 
Автоматизация нагрузочного тестирования — Григорий Липин
Автоматизация нагрузочного тестирования — Григорий ЛипинАвтоматизация нагрузочного тестирования — Григорий Липин
Автоматизация нагрузочного тестирования — Григорий Липин
 
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
 
Dev collaboration
Dev collaborationDev collaboration
Dev collaboration
 
обзор средств для тестирования Java script
обзор средств для тестирования Java scriptобзор средств для тестирования Java script
обзор средств для тестирования Java script
 
Maven как средство сборки проекта
Maven как средство сборки проектаMaven как средство сборки проекта
Maven как средство сборки проекта
 
Алексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web WorkersАлексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web Workers
 
Multithreading in go
Multithreading in goMultithreading in go
Multithreading in go
 
Андрей Михайлов. Vagrant. Быстрое развертывание среды
Андрей Михайлов. Vagrant. Быстрое развертывание средыАндрей Михайлов. Vagrant. Быстрое развертывание среды
Андрей Михайлов. Vagrant. Быстрое развертывание среды
 
Moscow DevOps meetup 18.05.13
Moscow DevOps meetup 18.05.13Moscow DevOps meetup 18.05.13
Moscow DevOps meetup 18.05.13
 
Svn rule in_team_project
Svn rule in_team_projectSvn rule in_team_project
Svn rule in_team_project
 
Антон Каляев — Быстрое развертывание среды с Vagrant
Антон Каляев — Быстрое развертывание среды с VagrantАнтон Каляев — Быстрое развертывание среды с Vagrant
Антон Каляев — Быстрое развертывание среды с Vagrant
 
Иван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проектаИван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проекта
 
"Sphinx 3.0 в реальной жизни" Андрей Смирнов (Avito)
"Sphinx 3.0 в реальной жизни" Андрей Смирнов (Avito)"Sphinx 3.0 в реальной жизни" Андрей Смирнов (Avito)
"Sphinx 3.0 в реальной жизни" Андрей Смирнов (Avito)
 
Vagrant puppet
Vagrant puppetVagrant puppet
Vagrant puppet
 
Система управления автоматическими тестами на примере использования Visual St...
Система управления автоматическими тестами на примере использования Visual St...Система управления автоматическими тестами на примере использования Visual St...
Система управления автоматическими тестами на примере использования Visual St...
 
Вредные советы для разработчиков
Вредные советы для разработчиковВредные советы для разработчиков
Вредные советы для разработчиков
 
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
 

En vedette

Chapter 24 (pba) imperialism children's book
Chapter 24  (pba) imperialism children's bookChapter 24  (pba) imperialism children's book
Chapter 24 (pba) imperialism children's book
wendyji
 
From NASA to Startups to Big Commerce
From NASA to Startups to Big CommerceFrom NASA to Startups to Big Commerce
From NASA to Startups to Big Commerce
Daniel Greenfeld
 

En vedette (20)

SchoolCTF 2012 - Tpircsavaj
SchoolCTF 2012 - TpircsavajSchoolCTF 2012 - Tpircsavaj
SchoolCTF 2012 - Tpircsavaj
 
SchoolCTF 2012 - Acid
SchoolCTF 2012 - AcidSchoolCTF 2012 - Acid
SchoolCTF 2012 - Acid
 
SchoolCTF 2012 - Bin Pix
SchoolCTF 2012 - Bin PixSchoolCTF 2012 - Bin Pix
SchoolCTF 2012 - Bin Pix
 
SchoolCTF 2012 - Rings
SchoolCTF 2012 - RingsSchoolCTF 2012 - Rings
SchoolCTF 2012 - Rings
 
How to Open School For Young Hackers
How to Open School For Young HackersHow to Open School For Young Hackers
How to Open School For Young Hackers
 
Python's slippy path and Tao of thick Pandas: give my data, Rrrrr...
Python's slippy path and Tao of thick Pandas: give my data, Rrrrr...Python's slippy path and Tao of thick Pandas: give my data, Rrrrr...
Python's slippy path and Tao of thick Pandas: give my data, Rrrrr...
 
Разработка фреймворка на Python для автоматизации тестирования STB боксов
Разработка фреймворка на Python для автоматизации тестирования STB боксовРазработка фреймворка на Python для автоматизации тестирования STB боксов
Разработка фреймворка на Python для автоматизации тестирования STB боксов
 
SchoolCTF 2012 - See Shark
SchoolCTF 2012 - See SharkSchoolCTF 2012 - See Shark
SchoolCTF 2012 - See Shark
 
Python GC
Python GCPython GC
Python GC
 
PiterPy 2015 - Трансдюсеры и Python
PiterPy 2015 - Трансдюсеры и PythonPiterPy 2015 - Трансдюсеры и Python
PiterPy 2015 - Трансдюсеры и Python
 
Python Internals Optimization Choices Made - Codementors Office Hours with St...
Python Internals Optimization Choices Made - Codementors Office Hours with St...Python Internals Optimization Choices Made - Codementors Office Hours with St...
Python Internals Optimization Choices Made - Codementors Office Hours with St...
 
Коварный code type ITGM #9
Коварный code type ITGM #9Коварный code type ITGM #9
Коварный code type ITGM #9
 
ITGM #9 - Коварный CodeType, или от segfault'а к работающему коду
ITGM #9 - Коварный CodeType, или от segfault'а к работающему кодуITGM #9 - Коварный CodeType, или от segfault'а к работающему коду
ITGM #9 - Коварный CodeType, или от segfault'а к работающему коду
 
Магия метаклассов
Магия метаклассовМагия метаклассов
Магия метаклассов
 
Python dictionary : past, present, future
Python dictionary: past, present, futurePython dictionary: past, present, future
Python dictionary : past, present, future
 
C++ Generators and Property-based Testing
C++ Generators and Property-based TestingC++ Generators and Property-based Testing
C++ Generators and Property-based Testing
 
Destruction Masking in Frostbite 2 using Volume Distance Fields
Destruction Masking in Frostbite 2 using Volume Distance FieldsDestruction Masking in Frostbite 2 using Volume Distance Fields
Destruction Masking in Frostbite 2 using Volume Distance Fields
 
Chapter 24 (pba) imperialism children's book
Chapter 24  (pba) imperialism children's bookChapter 24  (pba) imperialism children's book
Chapter 24 (pba) imperialism children's book
 
Reactive Stream Processing in Industrial IoT using DDS and Rx
Reactive Stream Processing in Industrial IoT using DDS and RxReactive Stream Processing in Industrial IoT using DDS and Rx
Reactive Stream Processing in Industrial IoT using DDS and Rx
 
From NASA to Startups to Big Commerce
From NASA to Startups to Big CommerceFrom NASA to Startups to Big Commerce
From NASA to Startups to Big Commerce
 

Similaire à Pundle для менджемента зависимостей в python проектах

Docker & Puppet: как их скрестить и надо ли вам это?
Docker & Puppet: как их скрестить и надо ли вам это?Docker & Puppet: как их скрестить и надо ли вам это?
Docker & Puppet: как их скрестить и надо ли вам это?
Anton Turetsky
 
Gevent для эмуляции нагрузки
Gevent для эмуляции нагрузкиGevent для эмуляции нагрузки
Gevent для эмуляции нагрузки
m0use
 
Александр Чистяков - Практический опыт использования решений виртуализации в ...
Александр Чистяков - Практический опыт использования решений виртуализации в ...Александр Чистяков - Практический опыт использования решений виртуализации в ...
Александр Чистяков - Практический опыт использования решений виртуализации в ...
HappyDev
 
Практический опыт применения виртуализации для web-систем
Практический опыт применения виртуализации для web-системПрактический опыт применения виртуализации для web-систем
Практический опыт применения виртуализации для web-систем
Alex Chistyakov
 
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Ontico
 
presentation_r00t_conf
presentation_r00t_confpresentation_r00t_conf
presentation_r00t_conf
Max Glekov
 
Абак Пресс
Абак ПрессАбак Пресс
Абак Пресс
it-people
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...
it-people
 

Similaire à Pundle для менджемента зависимостей в python проектах (20)

Масштабируемый DevOps
Масштабируемый DevOpsМасштабируемый DevOps
Масштабируемый DevOps
 
Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And Forge
 
CI/CD-приложений на Tarantool: от пустого репозитория — до продакшна
CI/CD-приложений на Tarantool: от пустого репозитория — до продакшнаCI/CD-приложений на Tarantool: от пустого репозитория — до продакшна
CI/CD-приложений на Tarantool: от пустого репозитория — до продакшна
 
Docker & Puppet: как их скрестить и надо ли вам это?
Docker & Puppet: как их скрестить и надо ли вам это?Docker & Puppet: как их скрестить и надо ли вам это?
Docker & Puppet: как их скрестить и надо ли вам это?
 
Docker & Puppet - как их скрестить и надо ли вам это, Антон Турецкий (Badoo)
Docker & Puppet - как их скрестить и надо ли вам это, Антон Турецкий (Badoo)Docker & Puppet - как их скрестить и надо ли вам это, Антон Турецкий (Badoo)
Docker & Puppet - как их скрестить и надо ли вам это, Антон Турецкий (Badoo)
 
Docker & puppet - как их скрестить и надо ли вам это, Антон Турецкий (Badoo)
Docker & puppet - как их скрестить и надо ли вам это, Антон Турецкий (Badoo)Docker & puppet - как их скрестить и надо ли вам это, Антон Турецкий (Badoo)
Docker & puppet - как их скрестить и надо ли вам это, Антон Турецкий (Badoo)
 
Разработка декстопных приложений для linux (Владимир Яковлев)
Разработка декстопных приложений для linux (Владимир Яковлев)Разработка декстопных приложений для linux (Владимир Яковлев)
Разработка декстопных приложений для linux (Владимир Яковлев)
 
Gevent для эмуляции нагрузки
Gevent для эмуляции нагрузкиGevent для эмуляции нагрузки
Gevent для эмуляции нагрузки
 
Использование gevent для эмуляции высокой нагрузки
Использование gevent для эмуляции высокой нагрузкиИспользование gevent для эмуляции высокой нагрузки
Использование gevent для эмуляции высокой нагрузки
 
Александр Чистяков - Практический опыт использования решений виртуализации в ...
Александр Чистяков - Практический опыт использования решений виртуализации в ...Александр Чистяков - Практический опыт использования решений виртуализации в ...
Александр Чистяков - Практический опыт использования решений виртуализации в ...
 
Практический опыт применения виртуализации для web-систем
Практический опыт применения виртуализации для web-системПрактический опыт применения виртуализации для web-систем
Практический опыт применения виртуализации для web-систем
 
Mercurial
MercurialMercurial
Mercurial
 
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
 
My talk on Salt and Ansible from DevConf 2014
My talk on Salt and Ansible from DevConf 2014My talk on Salt and Ansible from DevConf 2014
My talk on Salt and Ansible from DevConf 2014
 
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
 
presentation_r00t_conf
presentation_r00t_confpresentation_r00t_conf
presentation_r00t_conf
 
Абак Пресс
Абак ПрессАбак Пресс
Абак Пресс
 
Continuousdelivery
ContinuousdeliveryContinuousdelivery
Continuousdelivery
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...
 

Pundle для менджемента зависимостей в python проектах

  • 1. PYENV И PUNDLE Альтернативный взгляд на работу с зависимостями
  • 2. PYENV • большой набор версий python • автоматически переключает версию, файл .pyenv-version • девственный site-packages • но с самым важным внутри
  • 3.
  • 5. • virtualenv venv • venv/bin/pip install -r requirements.txt • venv/bin/python manage.py run
  • 6.
  • 7.
  • 8. REQUIREMENTS.TXT • Flask > 0.10 • Какая версия будет в итоге? • Если прописать Flask == 0.10, какая версия Werkzeug будет в итоге? • pip freeze бесполезен
  • 9. PIP-TOOLS • pip-compile, ветка future • requirements.in только нужные пакеты • requirements.txt с замороженными зависимостями • http://nvie.com/posts/better-package-management/
  • 10. ПРОБЛЕМЫVIRTUALENV • нет возможности быстро переключать версии пакетов • нет простого метода заморозить версии • много возни ручками при разных версиях пакетов в разных ветках • иногда ломается и требует пересборки
  • 11. А ЧТО СОБСТВЕННО ДЕЛАЕТVIRTUALENV? • Если откинуть в сторону все пляски с созданием магической папки, то в чем соль? • Мы закидываем пакеты в отдельную папку и импортируем их оттуда • Каждый проект содержит все пакеты • Они дублируются • Их надо ставить отдельно в каждую папку • Есть много решений как ставить их быстро!
  • 12. ВСЁ РЕШАЕМО! pip wheel - действительно ускоряет, но решает немного не ту проблему.
  • 13. КАК МОЖНО РЕШИТЬ ИНАЧЕ? • можно ставить пакеты в индивидуальные папки, по версиям пакетов и по версиям интерпретаторов • при старте читаем frozen.txt и монтируем нужные версии пакетов
  • 14. НУЖНО УПРАВЛЯТЬ ВЕРСИЯМИ • читаем requirements.txt, frozen.txt • если какие-то зависимости отсутствуют во frozen.txt, вытягиваем максимальную удовлетворяющую версию и замораживаем
  • 15. PUNDLE • управляет версиями • пакеты лежат в ~/.pundledir • монтируются при старте import pundle; pundle.activate() • ругается, если frozen.txt неактуален
  • 17. СЛУЧАЙ WERKZEUG • Pundle надо запуститься перед загрузкой всего остального кода, например через ‘-c “import pundle; pundle.activate(); exec(open(‘script’).read())” • автоматический рестарт. Внутри магия, которая пытается воссоздать командную строку • python не позволяет достать аргументы к “-c” и прячет их из sys.argv. Да и вообще стирает на уровне C из orig_argv (ещё раз - orig_argv, orig, именно, argv). • можно обойти через usercustomize.py или правкой стартового скрипта
  • 18. .PTH INSANITY • Самый частый случай использования это выполнить что-то при старте интерпретатора • Класть надо в site-packages • Нет стандартного механизма • Часто используют не в разумных целях
  • 19. SUPERVISOR.RUN • import subprocess; import run; subprocess.run = run.run;
  • 20.
  • 21. ПРОБУЕМ • берем проект с requirements.txt • pyenv shell 3.4.1 • pip install pundle • python -m pundle install • python -m pundle run script.py • python -m pundle exec pyflakes