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?
• Если откинуть в сторону все пляски с созданием магической папки,
то в чем соль?
• Мы закидываем пакеты в отдельную папку и импортируем их оттуда
• Каждый проект содержит все пакеты
• Они дублируются
• Их надо ставить отдельно в каждую папку
• Есть много решений как ставить их быстро!
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
• Нет стандартного механизма
• Часто используют не в разумных целях