Python Build Tools: настройка и использование в среде разработки

Раздел: Python -> IDE и редакторы

Инструменты сборки Python: современные подходы и настройка

Как подготовить пакет Python к сборке и публикации, используя стандартизированную конфигурацию?

Наиболее эффективным речением сегодня является использование pyproject.toml в сочетании с утилитой build и бэкендом setuptools. Этот подход рекомендован PyPA (Python Packaging Authority) и поддерживается всеми современными IDE, включая PyCharm и VS Code, без дополнительных плагинов.


# pyproject.toml
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"

[project]
name = "mypackage"
version = "0.1.0"
description = "Пример пакета"
authors = [{name = "Автор", email = "author@example.com"}]
dependencies = [
    "requests>=2.28.0",
    "numpy",
]
  

Pip tools python (pip tools в python)

После создания файла в корне проекта достаточно выполнить команду:

python -m build

Python build tools (python build tools (инструменты сборки))

В результате в каталоге dist/ появятся .tar.gz (sdist) и .whl (wheel). Эти артефакты можно загрузить на PyPI или установить локально.

Типичная ошибка: отсутствие setuptools или устаревшая версия. Решение – обновить через pip install --upgrade setuptools. Другая проблема – конфликт зависимостей в [project.dependencies]; рекомендуется указывать версии с диапазонами (например >=2.28.0,<3).

Как объединить управление зависимостями и сборку в одном инструменте с автоматическим созданием виртуального окружения?

Для этого подходит Poetry. Он не только собирает пакет, но и управляет зависимостями, виртуальными окружениями и публикацией. Файл pyproject.toml здесь же используется, но с другим бэкендом.


# pyproject.toml (Poetry)
[tool.poetry]
name = "mypackage"
version = "0.1.0"
description = "Пример для Poetry"
authors = ["Автор"]

[tool.poetry.dependencies]
python = "^3.9"
requests = "^2.28"
numpy = "^1.24"

[tool.poetry.dev-dependencies]
pytest = "^7.0"

[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
  

Python packaging tools (python packaging tools (инструменты сборки))

Инициализация проекта и создание сборки:


poetry init
poetry add requests
poetry build
  

Python online код (онлайн редактор python)

Poetry создаёт виртуальное окружение автоматически при выполнении poetry install. В IDE, таких как PyCharm, достаточно указать interpreter от Poetry.

Проблема: при использовании Poetry в CI/CD может возникнуть необходимость установки самого Poetry. Решение – использовать официальный образ python:3.11-slim и установить через pip install poetry. Другая ошибка – несовместимость версий зависимостей; для диагностики применяется poetry check.

Как быстро создавать, собирать и публиковать проекты Python с поддержкой нескольких версий Python?

Инструмент Hatch предлагает встроенные шаблоны проектов, управление окружениями и автоматическую сборку. Он особенно удобен для исследователей и разработчиков, часто работающих с разными версиями Python.


# pyproject.toml (Hatch)
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[project]
name = "mypackage"
version = "0.1.0"

[tool.hatch.version]
path = "mypackage/__init__.py"

[tool.hatch.envs.default]
dependencies = [
    "requests",
    "numpy",
]
  

Find python script (поиск python скрипта)

Создание нового проекта и сборка:


hatch new mypackage
cd mypackage
hatch build
  

Hatch автоматически определяет версию из файла __init__.py и создаёт дистрибутивы. Кроме того, можно задать несколько окружений для разных Python версий в одном проекте.

Типичная ошибка: Hatch требует наличие hatchling в списке requires. Если бэкенд указан неверно, сборка завершится с ошибкой ModuleNotFoundError: No module named 'hatchling'. Решение – проверить поле build-system.

- File manager python (файловый менеджер на python)
- Microsoft vs python (python в visual studio)
- Microsoft code python (настройка python в visual studio code)

Расширенные примеры работы с инструментами сборки

Пример 1: сборка с C расширением (Cython) через setuptools

Для включения Cython-модуля в пакет необходимо добавить setup.py (хотя основная конфигурация в pyproject.toml).

Пример

# pyproject.toml
[build-system]
requires = ["setuptools>=61.0", "wheel", "Cython"]
build-backend = "setuptools.build_meta"

# setup.py (дополнительно)
from setuptools import setup
from Cython.Build import cythonize

setup(
    ext_modules = cythonize("mypackage/fast_math.pyx")
)

Выполните сборку:

Пример
python -m build

Результат: в dist/ появится wheel, включающий скомпилированный .so/.pyd файл. Если Cython не установлен, возникает ошибка ModuleNotFoundError – добавьте Cython в requires.

Пример 2: использование Poetry для группировки зависимостей

Создайте проект Poetry с группами для тестирования и документации.

Пример

# pyproject.toml
[tool.poetry]
name = "mypackage"
version = "0.2.0"

[tool.poetry.dependencies]
python = "^3.10"
requests = "^2.28"

[tool.poetry.group.test.dependencies]
pytest = "^7.4"  # устанавливается через poetry install --with test

[tool.poetry.group.docs.dependencies]
sphinx = "^6.2"

[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

Команды для установки зависимостей:

Пример

poetry install                     # только основные
poetry install --with test,docs    # основные + test + docs

Это позволяет избежать загрязнения продакшен-окружения лишними библиотеками. Если вы случайно выполните poetry add pytest без указания группы, зависимость попадёт в основные – исправляется удалением и повторным добавлением с флагом --group test.

Пример 3: настройка Hatch для нескольких окружений с разными версиями Python

Hatch поддерживает матрицу окружений, указав версии Python в [tool.hatch.envs].

Пример

# pyproject.toml
[tool.hatch.version]
path = "mypackage/__init__.py"

[tool.hatch.envs.default]
features = []

[tool.hatch.envs.py39]
python = "3.9"
dependencies = ["pytest"]

[tool.hatch.envs.py311]
python = "3.11"
dependencies = ["pytest"]

Запустите тесты в каждом окружении:

Пример

hatch run py39:pytest
hatch run py311:pytest

Результат выполнения:

# Окружение py39
============================= test session starts ==============================
platform linux -- Python 3.9.18, pytest-7.4.2
collected 2 items
...

# Окружение py311
============================= test session starts ==============================
platform linux -- Python 3.11.6, pytest-7.4.2
collected 2 items
...

Ошибка: если указанная версия Python не установлена, Hatch выдаст сообщение Python 3.9 not found. Решение – установить нужную версию через менеджер версий (pyenv, conda).

Пример 4: публикация пакета на TestPyPI с помощью build и twine

Пример

# Сборка
python -m build

# Загрузка на TestPyPI (требуется twine)
pip install twine
twine upload --repository-url https://test.pypi.org/legacy/ dist/*

После успешной загрузки можно установить пакет с тестового репозитория:

Пример

pip install -i https://test.pypi.org/simple/ mypackage

Результат: пакет будет установлен из тестового хранилища. Если не указать --repository-url, twine попытается загрузить на основной PyPI – это частая ошибка новичков. Для отладки используйте twine check dist/* перед загрузкой.

Python build tools (инструменты сборки) - comments

En
Python build tools (python)