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

Сборка (повторение)

Главная ссылка Что умеет pip install:

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

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

Что должно входить в wheel / sdist?

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

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

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

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

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

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

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

∃ Более сложный инструмент ­— poetry, но он предписывает определённый workflow и скрывает многие действия под капотом, попробуем разобраться на нижнем уровне.

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

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

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

    • Для установки эксплуатационных зависимостей — pipenv install эксплуатационные зависимости

      • записывается в секцию [packages] файла Pipfile

      • pipenv install пакет обновляет Pipfile, даже если до этого был сделан pip install пакет

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

      • Обновляет секцию [dev-packages] в Pipfile

При формировании дистрибутива / архива исходников

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

  2. Сборочные зависимости

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

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

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

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

Пример такого инструмента: pip запускается из командной строки. Выдаёт довольно адекватную информацию, как минимум про репозиторий с примером

  1. Составить словарь: какому из установленных пакетов какой файл принадлежит ( <!> эта задача почему-то ещё не решена)

    • Учитывать только пакеты, установленные непосредственно, а не по зависимостям (например, с помощью pip list --not-required)

  2. Запустить все инструменты сборки и тестирования с трассировкой (PYTHONVERBOSE=import python … или python -v …)

  3. Проанализировать журнал трассировки на предмет использования файлов, принадлежащих пакетам из локального окружения

<!> Возможны ситуации, когда для сборки требуется инструмент, который был поставлен автоматом по зависимости, а то, что его требовало, для сборки не нужно.

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

Pipfile vs requirements.txt

Точки входа

Делоймент

Может быть разный, но мы остановимся на простой установке wheel:

Где искать файлы?

Обратите внимание на переводы — с ними та же история!

Пример

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

TODO более простой пример с дистрибутивными генератами, которые надо упаковать в wheel

Д/З

Обеспечить в семестровом проекте:

Это весь семестровый проект, готовый к сдаче!

LecturesCMC/PythonDevelopment2022/12_Packaging (последним исправлял пользователь FrBrGeorge 2022-05-15 15:11:42)