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. Хто я??? Игорь Овсянников CI Engineer в Домклик Люблю Python

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

    и Kotlin Образование: Инклюзивная школа «Ковчег» Самоучка КРЫСЫ!!1
  3. Virtualenv python3 -m venv Плюсы - Он простой - Он

    всем понятен - Он есть везде - Хорош для разработки Минусы - В голом виде неудобен - Размер поменьше, чем у node_modules - Но всё равно неприятно - Не самодостаточен - Не портируем из-за символических ссылок
  4. pip Установка зависимостей Setuptools (a.k.a. setup.py) Сборка пакета twine Загрузка

    в репозиторий * Сколько форматов для setuptools вы знаете? pip, setuptools, twine Бууу, мы это и так знаем!
  5. Формат PEP 517 pyproject.toml - Описывает технические требования к системе

    сборки - Абстрактен, под него можно адаптировать любую систему сборки - Скажем нет YAML-у!
  6. Poetry Проект Sébastien Eustace (github://sdispater) Плюсы - Управляет зависимостями -

    Собирает дистрибутив - Сам смотрит за venv-ом - Умеет загружать проект в PyPI - Расширяем плагинами - Тупа харош [tool.poetry] name = "sorter" version = "0.1.0" description = "" authors = ["Igor Ovsyannikov <[email protected]>"] readme = "README.md" [tool.poetry.dependencies] python = "^3.7" pendulum = "^2.1" [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api"
  7. 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"
  8. Hatch 3 килозвёзд на гитхабе, но у Poetry больше -

    Очень похож на Poetry - Несколько окружений в одном проекте - Умеет извлекать версию из проекта (из __version__ и не только) - Много настроек - Расширяем плагинами
  9. поставляется с Python >=3.5 легок в работе может паковать зависимости

    в тот же архив (делать bundle) требует наличия интерпретатора zipapp Модуль для формирования исполняемых архивов
  10. PyInstaller Что-то новое! - Формирует бинарные сборки приложений, содержащие интерпретатор,

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

    Формирует спеку и RPM-пакет (RedHat Package Manager)
  12. dh_virtualenv Проект команды Spotify для экосистемы Debian/Ubuntu/etc - Формирует .deb-пакет

    с виртуальным окружением вашего кода - Требует некоторого скилла в мейнтейнерстве Debian-пакетов - Конечный код будет привязан к определённому интерпретатору
  13. Conda Пакетный менеджер Anaconda - Свой формат пакетов - Свой

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

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

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