0Pricing
Python Academy · Урок

Сборка с помощью build

Создавайте wheel-пакеты и исходные дистрибутивы

«Сборка с помощью build» — бесплатный урок Python Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.

Что означает сборка

Исходный код необходимо превратить в артефакты дистрибутива, которые сможет установить pip. Современный инструмент для этого — build, запускаемый командой python -m build.

Он создаёт два вида файлов: дистрибутив исходного кода и готовый архив.

Исходный дистрибутив и готовый архив

Существует два вида артефактов:

  • дистрибутив исходного кода (.tar.gz) — архив исходного кода; pip собирает его при установке
  • готовый архив (.whl) — заранее собранный архив; pip просто распаковывает его

Готовые архивы устанавливаются быстрее и предпочтительнее. Дистрибутив исходного кода — запасной вариант и канонический источник.

Установка инструмента сборки

Установите его один раз с помощью pip install build. Это небольшой интерфейс: он читает ваш pyproject.toml, создаёт изолированное окружение и вызывает ваш сервер сборки для создания артефактов.

Вы не вызываете сервер сборки напрямую — build координирует этот процесс.

Запуск сборки

Запустите из корня проекта команду python -m build. По умолчанию она создаёт и дистрибутив исходного кода, и готовый архив, помещая их в новый каталог dist/.

Используйте --wheel или --sdist, чтобы собрать только один из них.

args = []
targets = []
if '--sdist' in args:
    targets.append('sdist')
if '--wheel' in args:
    targets.append('wheel')
if not targets:
    targets = ['sdist', 'wheel']
print('Will build:', targets)

Имена файлов готового архива

Имена готовых архивов содержат метаданные: mytool-0.1.0-py3-none-any.whl означает имя mytool, версию 0.1.0, Python 3, отсутствие требований к ABI и совместимость с любой платформой. Пакеты, написанные только на Python, получают обозначение py3-none-any.

name = 'mytool'
version = '0.1.0'
wheel = name + '-' + version + '-py3-none-any.whl'
print(wheel)
print('Parts:', wheel[:-4].split('-'))

Изоляция сборки

По умолчанию build создаёт новое виртуальное окружение, устанавливает в него зависимости из requires вашего раздела [build-system] и выполняет сборку там. Это гарантирует, что сборка случайно не будет зависеть от пакетов, которые просто оказались в вашем окружении.

Проверка папки dist

После сборки каталог dist/ содержит ваши артефакты. Просмотр его содержимого позволяет проверить результат перед загрузкой. Это обычный просмотр содержимого каталога.

dist = ['mytool-0.1.0.tar.gz', 'mytool-0.1.0-py3-none-any.whl']
for f in dist:
    kind = 'sdist' if f.endswith('.tar.gz') else 'wheel'
    print(kind.ljust(6), f)

Проверка готового архива

Готовый архив — это всего лишь ZIP-архив. Вы можете распаковать его и убедиться, что модули и файлы данных присутствуют, а ничего важного не пропущено. Если файла здесь нет, после установки его тоже не будет.

Чистые сборки

Устаревшие файлы в каталогах build/ или dist/ могут приводить к непонятным результатам. Удаляйте эти каталоги перед сборкой выпуска, чтобы опубликовать именно то, что создаёт текущий исходный код.

stale_dirs = ['build', 'dist', 'mytool.egg-info']
for d in stale_dirs:
    print('Remove before clean build:', d)

Воспроизводимые сборки

Один и тот же исходный код всегда должен создавать одни и те же артефакты. Зафиксируйте версии сервера сборки в разделе [build-system] requires и не извлекайте значения из текущего окружения. Воспроизводимость означает, что коллега или сервер непрерывной интеграции получит идентичный результат.

Вместе с чистыми сборками это устраняет неожиданности в духе «у меня на компьютере работает».

Сборка на сервере непрерывной интеграции

Большинство проектов собирается на сервере непрерывной интеграции, а не на ноутбуке. Задание непрерывной интеграции получает код из репозитория, запускает python -m build и сохраняет артефакты. Это гарантирует, что выпуски каждый раз создаются из известного чистого состояния.

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

Быстрая проверка

Проверьте свои знания о сборке.

Итоги

Вы научились создавать артефакты:

  • pip install build, затем python -m build
  • Создаётся дистрибутив исходного кода (.tar.gz) и готовый архив (.whl) в каталоге dist/
  • Сборка выполняется в изолированном окружении с использованием зависимостей [build-system]
  • Проверяйте готовый архив и выполняйте чистую сборку перед выпуском

Часто задаваемые вопросы

Урок «Сборка с помощью build» бесплатный?

Да — полный текст урока «Сборка с помощью build» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.

Чему я научусь в уроке «Сборка с помощью build»?

Создавайте wheel-пакеты и исходные дистрибутивы Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Python Academy?

Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Сборка с помощью build»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Python Academy?

Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Структура проекта и pyproject.toml
  2. Сборка с помощью build
  3. Версии и метаданные
  4. Публикация с помощью twine
← Назад к Python Academy