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
PRO

August 23, 2018
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. осваиваем
    PIPENV
    Александр Хаёров

    @hayorov

    View Slide

  2. View Slide

  3. @hayorov
    Александр Хаёров

    View Slide

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

    View Slide

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

    View Slide

  6. View Slide

  7. Немного истории

    View Slide

  8. Прошлое

    View Slide

  9. Проблемы
    • PyPi (“The Cheeseshop”) был буквально индексом для пакетов.
    • Пакеты хостились в различных местах.
    • PyPi “крутился” на маленьком сервере в Швеции.
    • Объем пакетов и число пользователей небольшое, 

    в целом - не проблема :)

    View Slide

  10. Настоящие проблемы
    • Все установка вручную - неудобно для CI.
    • Пакеты устанавливаются глобально,

    два проекта с разными версиями пакета $
    • Люди банально копировали пакеты в site-packages.
    • Скверный user experience.

    View Slide

  11. Новый виток развития

    View Slide

  12. ⚡ Улучшения
    • Установка стала удобнее
    • Пакеты забираются из PyPi
    • Легче встроить в CI
    • Забыли про easy_uninstall

    View Slide

  13. Наши дни

    View Slide

  14. 2010 …
    • Pip стал “де-факто” стандартом и заменил easy_install
    • Virtualenv стал применяться повсеместно
    • Легче встроить в CI
    • Прикрепленный requirements.txt в корне проекта

    View Slide

  15. Virtualenv
    • Отдельный “python home" для каждого проекта
    • Очень удачна идея, дающая большую гибкость
    • Для Ruby не актуально, разные версии Gem-ов могут
    устанавливаться вместе

    View Slide

  16. Pip: пакетный менеджер
    • “Разрешает”, загружает, устанавливает и удаляет зависимости.
    • Пакеты берутся из PyPi или произвольного URL
    • Поддерживает requirements.txt.
    • Манипулирует различными “виртуальными окружениями”.

    View Slide

  17. Общая практика наших дней

    View Slide

  18. Venv: Недостатки
    • Трудно понять уровень абстракции. Вечная проблема
    для новичков.
    • Ручной процесс использования, но легко
    автоматизировать
    • Утилиты вида virtualenv-wrapper были созданы чтобы
    это упростить

    View Slide

  19. requirements.txt
    $ pip freeze > requirements.txt
    • Несоответствие “что хочется получить установленное” vs “что
    требуется установить”
    • “Сплющенный” список зависимостей необходим чтобы
    получать одинаковые сборки
    • Утилиты вида pip-tools созданы чтобы это упростить

    View Slide

  20. requirements.txt
    $ cat requirements.txt
    click==6.7
    Flask==0.12.2
    itsdangerous==0.24

    Jinja2=2.10

    Werkzeug==0.14.1
    • Детерминированный
    • Результат “pip freeze”
    • Включает все
    зависимости
    • Невозможно разобраться 

    что происходит

    View Slide

  21. requirements.txt
    $ cat requirements.txt
    Flask
    • Недетерминированный
    • Истинные зависимости
    • Понятны человеку

    View Slide

  22. Нет lockfile
    два вида requirements.txt

    View Slide

  23. Pipfile решение

    View Slide

  24. Pipfile
    • Pipfile это новый стандарт, замена requirements.txt.
    • TOML (ini файл), легко читать и редактировать.
    • Две группы: [packages] и [dev-packages].
    • Дружелюбный для pip

    View Slide

  25. Пример Pipfile
    $ cat Pipfile
    [[source]]
    url = “https://pypi.python.org”
    verify_ssl = true
    name = “pypi”
    [packages]
    flask = “*”
    [dev-packages]
    pytest = “*”

    View Slide

  26. Pipfile.lock
    • JSON формат, легко читать роботами
    • Содержит все транзитивные зависимости и хеши
    • Две группы: “default” и “develop”.

    View Slide

  27. $ cat Pipfile.lock
    {
    "_meta": {
    "hash": {
    "sha256": "8d14434df45e0ef884d6c3f6e8048ba72335637a8631cc44792f52fd20b6f97a"
    },
    “default": {
    "flask": {
    "hashes": [
    "sha256:54a07c09c586b0e4c619f02a5e94e36619da8e2b053e20f594348c0611803704",
    "sha256:40523d2efb60523e113b44602298f0960e900388cf3bb6043f645cf57ea9e3f5"
    ],
    "version": "==0.12.2"
    },

    View Slide

  28. Pipfile: а есть ли проблемы?
    • Pipfile еще не интегрирован в pip,

    и это потребует еще какого-то времени и ресурсов
    • Но вы можете начать пользоваться прямо сейчас c …

    View Slide

  29. Pipenv

    View Slide

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

    View Slide

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

    View Slide

  32. Pipenv

    View Slide

  33. Спасибо, вопросики …

    View Slide

  34. @hayorov
    Александр Хаёров
    Спасибо, вопросики …

    View Slide