Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Pundle: альтернатива virtualenv для разработки

Pundle: альтернатива virtualenv для разработки

Поговорим про неудобства использования virtualenv и pip, возможные решения, а также отдельно про pundle, как свой вариант.

Доклад Михаила Кривушина (AppCraft).

Moscow Python Meetup

April 07, 2015
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. PYENV • большой набор версий python • автоматически переключает версию,

    файл .pyenv-version • девственный site-packages • но с самым важным внутри
  2. REQUIREMENTS.TXT • Flask > 0.10 • Какая версия будет в

    итоге? • Если прописать Flask == 0.10, какая версия Werkzeug будет в итоге? • pip freeze бесполезен
  3. PIP-TOOLS • pip-compile, ветка future • requirements.in только нужные пакеты

    • requirements.txt с замороженными зависимостями • http://nvie.com/posts/better-package-management/
  4. ПРОБЛЕМЫ VIRTUALENV • нет возможности быстро переключать версии пакетов •

    нет простого метода заморозить версии • много возни ручками при разных версиях пакетов в разных ветках • иногда ломается и требует пересборки
  5. А ЧТО СОБСТВЕННО ДЕЛАЕТ VIRTUALENV? • Если откинуть в сторону

    все пляски с созданием магической папки, то в чем соль? • Мы закидываем пакеты в отдельную папку и импортируем их оттуда • Каждый проект содержит все пакеты • Они дублируются • Их надо ставить отдельно в каждую папку • Есть много решений как ставить их быстро!
  6. КАК МОЖНО РЕШИТЬ ИНАЧЕ? • можно ставить пакеты в индивидуальные

    папки, по версиям пакетов и по версиям интерпретаторов • при старте читаем frozen.txt и монтируем нужные версии пакетов
  7. НУЖНО УПРАВЛЯТЬ ВЕРСИЯМИ • читаем requirements.txt, frozen.txt • если какие-то

    зависимости отсутствуют во frozen.txt, вытягиваем максимальную удовлетворяющую версию и замораживаем
  8. PUNDLE • управляет версиями • пакеты лежат в ~/.pundledir •

    монтируются при старте import pundle; pundle.activate() • ругается, если frozen.txt неактуален
  9. СЛУЧАЙ WERKZEUG • Pundle надо запуститься перед загрузкой всего остального

    кода, например через ‘-c “import pundle; pundle.activate(); exec(open(‘script’).read())” • автоматический рестарт. Внутри магия, которая пытается воссоздать командную строку • python не позволяет достать аргументы к “-c” и прячет их из sys.argv. Да и вообще стирает на уровне C из orig_argv (ещё раз - orig_argv, orig, именно, argv). • можно обойти через usercustomize.py или правкой стартового скрипта
  10. .PTH INSANITY • Самый частый случай использования это выполнить что-то

    при старте интерпретатора • Класть надо в site-packages • Нет стандартного механизма • Часто используют не в разумных целях
  11. ПРОБУЕМ • берем проект с 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