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

Avatar for Moscow Python Meetup

Moscow Python Meetup PRO

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