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

Осваиваем pipenv

Осваиваем pipenv

Александр Хаёров (Ingram Micro Cloud) @ Moscow Python Meetup 59

"Пора найти время и разобраться с pipenv. Приносит ли он все лучшие практики работы с библиотеками и зависимостями в гавань пайтона? Все выводы основаны на практическом примере реального боевого проекта".

Видео: http://www.moscowpython.ru/meetup/59/learn-pipenv/

Moscow Python Meetup

August 23, 2018
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. Что такое лигатура приспособл е н и е д л

    я крепления т р о с т и к мундштуку з н а к , образованн ы й п у т ё м соединения двух и более графем нить для перевязке кровеносн ых сосудов А B С
  2. Что такое лигатура приспособл е н и е д л

    я крепления т р о с т и к мундштуку з н а к , образованн ы й п у т ё м соединения двух и более графем нить для перевязке кровеносн ых сосудов А B С
  3. Проблемы • PyPi (“The Cheeseshop”) был буквально индексом для пакетов.

    • Пакеты хостились в различных местах. • PyPi “крутился” на маленьком сервере в Швеции. • Объем пакетов и число пользователей небольшое, 
 в целом - не проблема :)
  4. Настоящие проблемы • Все установка вручную - неудобно для CI.

    • Пакеты устанавливаются глобально,
 два проекта с разными версиями пакета $ • Люди банально копировали пакеты в site-packages. • Скверный user experience.
  5. ⚡ Улучшения • Установка стала удобнее • Пакеты забираются из

    PyPi • Легче встроить в CI • Забыли про easy_uninstall
  6. 2010 … • Pip стал “де-факто” стандартом и заменил easy_install

    • Virtualenv стал применяться повсеместно • Легче встроить в CI • Прикрепленный requirements.txt в корне проекта
  7. Virtualenv • Отдельный “python home" для каждого проекта • Очень

    удачна идея, дающая большую гибкость • Для Ruby не актуально, разные версии Gem-ов могут устанавливаться вместе
  8. Pip: пакетный менеджер • “Разрешает”, загружает, устанавливает и удаляет зависимости.

    • Пакеты берутся из PyPi или произвольного URL • Поддерживает requirements.txt. • Манипулирует различными “виртуальными окружениями”.
  9. Venv: Недостатки • Трудно понять уровень абстракции. Вечная проблема для

    новичков. • Ручной процесс использования, но легко автоматизировать • Утилиты вида virtualenv-wrapper были созданы чтобы это упростить
  10. requirements.txt $ pip freeze > requirements.txt • Несоответствие “что хочется

    получить установленное” vs “что требуется установить” • “Сплющенный” список зависимостей необходим чтобы получать одинаковые сборки • Утилиты вида pip-tools созданы чтобы это упростить
  11. requirements.txt $ cat requirements.txt click==6.7 Flask==0.12.2 itsdangerous==0.24
 Jinja2=2.10
 Werkzeug==0.14.1 •

    Детерминированный • Результат “pip freeze” • Включает все зависимости • Невозможно разобраться 
 что происходит
  12. Pipfile • Pipfile это новый стандарт, замена requirements.txt. • TOML

    (ini файл), легко читать и редактировать. • Две группы: [packages] и [dev-packages]. • Дружелюбный для pip
  13. Пример Pipfile $ cat Pipfile [[source]] url = “https://pypi.python.org” verify_ssl

    = true name = “pypi” [packages] flask = “*” [dev-packages] pytest = “*”
  14. Pipfile.lock • JSON формат, легко читать роботами • Содержит все

    транзитивные зависимости и хеши • Две группы: “default” и “develop”.
  15. $ cat Pipfile.lock { "_meta": { "hash": { "sha256": "8d14434df45e0ef884d6c3f6e8048ba72335637a8631cc44792f52fd20b6f97a"

    }, “default": { "flask": { "hashes": [ "sha256:54a07c09c586b0e4c619f02a5e94e36619da8e2b053e20f594348c0611803704", "sha256:40523d2efb60523e113b44602298f0960e900388cf3bb6043f645cf57ea9e3f5" ], "version": "==0.12.2" },
  16. Pipfile: а есть ли проблемы? • Pipfile еще не интегрирован

    в pip,
 и это потребует еще какого-то времени и ресурсов • Но вы можете начать пользоваться прямо сейчас c …
  17. Почему Pipenv • Python.org и сообщество рекомендует. • Позволяет использовать

    Pipfile/Pipfile.lock. • Полностью автоматизирует работу с virtualenv • Гарантирует повторяемость сборок, включая сверку хешей • Другие полезные утилиты: $ pipenv graph
  18. Критика • Не утилита для пакетирования • Придуман для приложений,

    а не библиотек • “Глючный” механизм определения зависимостей • Ошибки регресса новых версий • “*” для версии по-умолчанию • А что там с Poetry?