Перейти к содержанию

Упаковка и публикация пакетов

Начало урока

Упаковка и публикация пакетов

Превратите папку с модулями в устанавливаемый, версионированный пакет на PyPI, которым можно делиться

Главная идея: Пакет - это ваш код плюс небольшой манифест, который сообщает инструментам Python, как его собрать, установить и описать. Современный Python объявляет этот манифест в одном файле - pyproject.toml. Из него бэкенд сборки создаёт два артефакта: исходный дистрибутив (sdist) и собранный wheel. Вы загружаете их в Python Package Index (PyPI) с помощью twine, и после этого любой может выполнить pip install ваш-пакет. Здесь нет никакой магии - только метаданные, шаг сборки и загрузка.
К концу вы сможете:
  • разложить проект по src-раскладке и понять, почему она предотвращает целый класс ошибок,
  • написать полный pyproject.toml: [build-system], метаданные [project], зависимости, необязательные extras и консольные точки входа,
  • создавать и использовать изолированное виртуальное окружение для разработки,
  • собрать sdist и wheel с помощью python -m build и объяснить разницу,
  • выбрать версию по семантическому версионированию и держать единый источник истины,
  • публиковать сначала на TestPyPI, а затем на PyPI с API-токеном и twine.

1. Какую задачу решает упаковка

Вы уже умеете разбивать код на модули и пакеты (папки с __init__.py) и импортировать их. На вашей машине это работает, потому что текущий каталог находится в sys.path. Но как только код понадобится кому-то ещё, неформальный обмен даёт сбой: какие файлы нужны, какие сторонние библиотеки надо установить заранее, какая версия Python требуется и как import yourlib разрешится на чужой машине?

Упаковка отвечает на всё это декларативно. Вы описываете проект один раз, инструмент сборки создаёт стандартный артефакт, а pip берёт на себя установку в любое окружение - копирует файлы в site-packages и подтягивает объявленные зависимости. Читателю не нужно ничего угадывать; метаданные авторитетны.

Исторически эти метаданные жили в исполняемом скрипте setup.py. Запускать произвольный код только для того, чтобы прочитать имя проекта, было хрупко и небезопасно, поэтому экосистема перешла к декларативному стандарту. PEP 518 ввёл pyproject.toml, а PEP 621 стандартизировал таблицу [project]. Сегодня pyproject.toml - единственный нужный файл; setup.py и setup.cfg устарели.

Продолжите этот урок на YourAIZone

В полном уроке — объяснение целиком, разобранные примеры, частые ошибки, тесты с мгновенной проверкой и ИИ-репетитор. Начните сразу как гость или создайте аккаунт, чтобы сохранять прогресс.

В полном уроке

  • Объяснение целиком
  • Разобранные примеры
  • Частые ошибки и как их избежать
  • Тестовые вопросы: 15
  • ИИ-репетитор, который отвечает на вопросы по теме
  • Отслеживание прогресса для ученика, родителей и учителя