Пакетирование и деплоймент

Этапы формирования дистрибутива

Генераты не хранятся в репозитории, однако некоторые из них (например, документация, скомпилированные переводы и т. п.) используются при публикации.

Автоматизация сборки

Репозиторий с примером

Как понятие «сборка» стало «оркестрацией»

Универсальный инструмент сборки

Классический вариант: Make (его даже использует Sphinx). Однако это off-python зависимость).

На примере DoIt

В нашем случае нуждается в автоматизации:

Пример dodo.py

Сборка

Главная ссылка

Немного истории:

  1. Античность
  2. Distutils — встроенный в Python инструмент

  3. Появление Python Packaging Authority

  4. Появление других инструментов сборки: Poetry, pip-tools, PyBuilder и т. п.

    • ⇒ Введение нового уровня косвенности: pep-0517/pep-0518

      • Актуальная документация

      • Задание инструментов сборки
      • Декларативный синтаксис описания проекта
      • Метасборщик build

      • a. k. a. pyproject.toml/setup.cfg

      • Всё это в процессе разработки

Сборка бинарных и исходных дистрибутивов

Что умеет pip install:

Публиковать нужно и то, и то (лицензия, вопросы доработки и т. п.)

Пример: python -m build и что он создаёт

Пакетные зависимости

Эксплуатационные зависимости
Набор модулей, необходимых для эксплуатации приложения
  • Обязательные и предполагаемые
  • Включённые в python-инфраструктуру и все остальные
Сборочные зависимости

Набор модулей и ПО, необходимый для разработки

  • + Средства сборки

  • + Средства тестирования

  • - Возможно, часть эксплуатационных зависимостей замещена квазиобъектами

Отслеживание зависимостей

  1. Скопировать в чистое окружение и тупо запускать и добавлять в зависимости всё, из-за отсутствия чего падает)
  2. Сделать pip freeze и угадать, что из этого всего понадобится при запуске

  3. Соблюдать дисциплину с помощью pipenv:

    • Для установки чего не попадя — pip install что ни попадя

    • Для установки эксплуатационных зависимостей — pipenv install эксплуатационные зависимости (записывается в Pipfile; pipenv install работает даже если был сделан pip install)

    • Для установки сборочных зависимостей — pipenv install -d сборочные зависимости)

  4. Эксплуатационные зависимости

    • Хранятся в setup.cfg

    • можно отследить по наличию import-ов в модуле.
    • В т. ч. автоматически: pymin-reqs или pip-check-reqs

  5. Сборочные зависимости
    • Хранятся в pyproject.toml, потому что определяют инструменты сборки

    • Можно отследить путём трассировки import-ов. ш

    • <!> Но инструмента такого, похоже, нет!

Прототип инструмента, отслеживающего сборочные заивсимости

Строгие VS нестрогие зависимости на версии

Точки входа

Пример

Модельный семестровый проект

Д/З

LecturesCMC/PythonDevelopment2021/11_Packaging (последним исправлял пользователь FrBrGeorge 2021-05-06 20:26:00)