Upload
-
View
356
Download
1
Embed Size (px)
Citation preview
PYENV
• большой набор версий python
• автоматически переключает версию, файл .pyenv-version
• девственный site-packages
• но с самым важным внутри
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?
• Если откинуть в сторону все пляски с созданием магической папки, то в чем соль?
• Мы закидываем пакеты в отдельную папку и импортируем их оттуда
• Каждый проект содержит все пакеты
• Они дублируются
• Их надо ставить отдельно в каждую папку
• Есть много решений как ставить их быстро!
КАК МОЖНО РЕШИТЬ ИНАЧЕ?
• можно ставить пакеты в индивидуальные папки, по версиям пакетов и по версиям интерпретаторов
• при старте читаем 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
• Нет стандартного механизма
• Часто используют не в разумных целях