Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Build Tools для Python Проектов: Полный Стек
В зависимости от типа проекта, я использую разные инструменты сборки. Для Python разработки существует множество вариантов, каждый с своими плюсами и минусами. Давайте рассмотрим полный спектр.
1. Классическая Схема: setuptools + pip
Для классических Python пакетов я использую setuptools с pip для установки зависимостей. Это базовый подход, которым начинают 95% Python проектов.
# setup.py
from setuptools import setup, find_packages
setup(
name="my-package",
version="1.0.0",
packages=find_packages(),
install_requires=[
"django>=4.0",
"djangorestframework>=3.14",
],
entry_points={
"console_scripts": [
"myapp=myapp.cli:main",
],
},
)
2. Современный Стандарт: pyproject.toml
С Python 3.10+ рекомендуемый способ — использовать pyproject.toml согласно PEP 518/517:
[build-system]
requires = ["setuptools>=65.0", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "my-package"
version = "1.0.0"
requires-python = ">=3.10"
dependencies = [
"django>=4.0",
"djangorestframework>=3.14",
]
[project.optional-dependencies]
dev = [
"pytest>=7.0",
"pytest-django>=4.5",
"black>=23.0",
"ruff>=0.1",
]
3. Poetry: Менеджер Зависимостей
Poetry упрощает управление зависимостями и создание lock файлов для воспроизводимых сборок. Я использую его для большинства проектов:
poetry install # Установка с lock файлом
poetry add django # Добавить зависимость
poetry add --group dev pytest # Dev зависимость
poetry build # Собрать wheel + sdist
poetry publish # Публиковать на PyPI
4. uv: Супербыстрый Менеджер
uv от создателей Ruff (написан на Rust) — это суперсовременный менеджер пакетов, работающий в 10+ раз быстрее pip:
uv pip install django # Очень быстро
uv pip compile requirements.in # Генерация lock файла
uv venv # Быстрое создание окружения
5. Makefile для Удобства Разработки
Я всегда создаю Makefile для стандартизации команд в проекте:
.PHONY: dev test lint format build clean
dev:
pip install -e ".[dev]"
test:
pytest tests/ --cov=myapp
lint:
ruff check .
black --check .
format:
black .
ruff check --fix .
build:
python -m build
clean:
rm -rf build/ dist/ *.egg-info
find . -type d -name __pycache__ -exec rm -rf {} +
6. Docker для Production Сборки
Для production окружения я всегда использую Docker для reproducible builds:
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
RUN pip install -e .
CMD ["python", "-m", "myapp"]
7. CI/CD Pipeline (GitHub Actions)
Автоматизация сборки и тестирования через GitHub Actions:
name: Build and Test
on:
push:
branches: [main]
pull_request:
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.10", "3.11", "3.12"]
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- run: pip install -e ".[dev]"
- run: pytest tests/ --cov=myapp
- run: ruff check .
- run: black --check .
8. Nox для Многоверсионного Тестирования
Для тестирования на разных версиях Python используется Nox:
# noxfile.py
import nox
@nox.session(python=["3.10", "3.11", "3.12"])
def tests(session):
session.install("-e", ".[dev]")
session.run("pytest", "tests/")
@nox.session
def lint(session):
session.install("-e", ".[dev]")
session.run("ruff", "check", ".")
Сравнение Build Tools
| Инструмент | Скорость | Функциональность | Использование |
|---|---|---|---|
| pip | Медленно | Базовая | Старые проекты |
| Poetry | Средняя | Полная | Пакеты |
| uv | Очень быстро | Полная | Новые проекты |
| Docker | Пересборка | Воспроизводимость | Production |
| GitHub Actions | Зависит | Полная | CI/CD |
Мой Типичный Workflow
- Инициализирую проект: poetry init или использую pyproject.toml
- Добавляю зависимости: poetry add package_name
- Создаю Makefile для удобства команд разработки
- Настраиваю GitHub Actions для CI/CD
- Создаю Dockerfile для production
- Использую Nox для тестирования на разных версиях Python
- Публикую пакет: poetry publish или через CI/CD pipeline
Всё это обеспечивает быстрой, надёжной и воспроизводимой сборки проектов от разработки до production.
Заключение
Для современной Python разработки я использую комбинацию:
- pyproject.toml как стандарт конфигурации
- Poetry или uv для управления зависимостями
- Makefile для удобства разработки
- Docker для production сборки
- GitHub Actions для автоматизации CI/CD
Это обеспечивает простоту, скорость и надёжность сборки проектов.