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

В поисках идеальной системы сборки

В поисках идеальной системы сборки

Каждый питонщик желает знать, где сидит setup.py. Но в части случаев он может оказаться переусложнённым, или наоборот, слишком простым. Какие ещё системы сборки есть для Python, будет рассказано в этом докладе.

Выступление: https://moscowpython.ru/meetup/79/ideal-construction-sys/

MoscowPython: http://moscowpython.ru
Курсы Learn Python: http://learn.python.ru
Moscow Python Podcast: http://podcast.python.ru

Moscow Python Meetup

February 04, 2023
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. Инструменты сборки
    в Python

    View full-size slide

  2. Хто я???
    Игорь Овсянников
    CI Engineer в Домклик
    Люблю Python и Kotlin
    Образование:
    Инклюзивная школа «Ковчег»
    Самоучка

    View full-size slide

  3. Хто я???
    Игорь Овсянников
    CI Engineer в Домклик
    Люблю Python и Kotlin
    Образование:
    Инклюзивная школа «Ковчег»
    Самоучка
    КРЫСЫ!!1

    View full-size slide

  4. rabota.domclick.ru
    career.habr.com/companies/domclick
    hh.ru/employer/2136954

    View full-size slide

  5. DOCKER
    НЕ
    ПРЕДЛАГАТЬ
    Упаковка и доставка.
    Инструменты в опенсорсе

    View full-size slide

  6. Virtualenv
    python3 -m venv
    Плюсы
    - Он простой
    - Он всем понятен
    - Он есть везде
    - Хорош для
    разработки
    Минусы
    - В голом виде неудобен
    - Размер поменьше, чем у
    node_modules
    - Но всё равно неприятно
    - Не самодостаточен
    - Не портируем из-за символических
    ссылок

    View full-size slide

  7. pip
    Установка
    зависимостей
    Setuptools
    (a.k.a. setup.py)
    Сборка пакета
    twine
    Загрузка в
    репозиторий
    * Сколько форматов для setuptools вы знаете?
    pip, setuptools, twine
    Бууу, мы это и так знаем!

    View full-size slide

  8. Формат PEP 517
    pyproject.toml
    - Описывает технические
    требования к системе сборки
    - Абстрактен, под него можно
    адаптировать любую систему
    сборки
    - Скажем нет YAML-у!

    View full-size slide

  9. Poetry
    Проект Sébastien Eustace (github://sdispater)
    Плюсы
    - Управляет зависимостями
    - Собирает дистрибутив
    - Сам смотрит за venv-ом
    - Умеет загружать проект в
    PyPI
    - Расширяем плагинами
    - Тупа харош
    [tool.poetry]
    name = "sorter"
    version = "0.1.0"
    description = ""
    authors = ["Igor Ovsyannikov "]
    readme = "README.md"
    [tool.poetry.dependencies]
    python = "^3.7"
    pendulum = "^2.1"
    [build-system]
    requires = ["poetry-core"]
    build-backend = "poetry.core.masonry.api"

    View full-size slide

  10. Pipenv
    Проект Kenneth Reitz, автора requests
    - Тоже работает с зависимостями
    - Тоже поддерживает
    lock-файл
    - Тоже умеет управлять venv-ом
    - Не умеет выгружать библиотеки
    - Применим только к
    приложениям
    [dev-packages]
    pre-commit = "==2.*"
    pytest-cov = "==3.*"
    typing-extensions = "==4.*"
    [packages]
    click = "==8.0.3"
    [scripts]
    test = "pytest -vvs"

    View full-size slide

  11. Hatch
    3 килозвёзд на гитхабе, но у Poetry больше
    - Очень похож на Poetry
    - Несколько окружений в одном проекте
    - Умеет извлекать версию из проекта (из __version__ и не
    только)
    - Много настроек
    - Расширяем плагинами

    View full-size slide

  12. поставляется с Python >=3.5
    легок в работе
    может паковать зависимости в тот же архив (делать bundle)
    требует наличия интерпретатора
    zipapp
    Модуль для формирования исполняемых
    архивов

    View full-size slide

  13. PyInstaller
    Что-то новое!
    - Формирует бинарные сборки приложений, содержащие
    интерпретатор, приложение и его зависимости
    - Вы слышали????
    - ПОЛНЫЙ. БАНДЛ.
    - Инструмент кросплатформенный
    - Умеет паковать как консольные, так и графические
    приложения
    - Способен добавлять в дистрибутив дополнительные ресурсы
    (картинки, файлы)
    - Даже могёт в multiarch на MacOS (Intel+M1 сборки)
    - Очень гибко настраиваем
    - Подводные камни. Их много. Но всё решаемо!

    View full-size slide

  14. bdist_rpm
    Одной строкой. Ладно, не одной.
    - Компонент setuptools
    - Формирует спеку и RPM-пакет (RedHat Package
    Manager)

    View full-size slide

  15. dh_virtualenv
    Проект команды Spotify для экосистемы Debian/Ubuntu/etc
    - Формирует .deb-пакет с виртуальным окружением вашего кода
    - Требует некоторого скилла в мейнтейнерстве Debian-пакетов
    - Конечный код будет привязан к определённому
    интерпретатору

    View full-size slide

  16. Conda
    Пакетный менеджер Anaconda
    - Свой формат пакетов
    - Свой инструментарий для установки и разрешения
    зависимостей
    - Свой формат репозитория
    - Умеет работать с Python, R, Ruby, Java, JS и FORTRAN (штоа)
    - Требует наличия психических ресурсов

    View full-size slide

  17. Nuitka
    Интересный образец
    - Компилятор Пайтона
    - Написан на пайтоне
    - Транслирует Пайтон-код в программу на Си
    - Использует libpython для сборки таким образом, чтобы программа
    работала словно написана на Python
    - ...че
    - Ещё Нуйтка может собрать ваш проект в .so/.dll-библиотеку,
    которую можно импортировать из Python
    - Много подводных камней.
    - Требует наличия БОЛЬШИХ психических ресурсов

    View full-size slide

  18. PyOxidizer
    Проект из библиотек и инструментов для связки Python и... Rust!?
    pyembed
    - Библиотека для работы с интерпретатором Python из Rust
    pyo3
    - Фреймворк для написания библиотек на Rust
    - Которые можно спокойно импортировать из Python
    - Уже есть десятки примеров в GitHub
    PyOxy
    - Дистрибутив Python в виде одного файла
    Tugger
    - Универсальный, мультиплатформенный сборщик пакетов
    PyOxidizer
    - Компилятор Python проектов в single executable

    View full-size slide

  19. Что использовать?

    View full-size slide