Сборка с помощью 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 — локальная установка не требуется.
Все уроки этого курса
- Структура проекта и pyproject.toml
- Сборка с помощью build
- Версии и метаданные
- Публикация с помощью twine