Упаковка Python
«Спорное» мнение
Использование `setup.py` для упаковки и распространения ваших пакетов Python иногда может быть довольно сложным. Современные инструменты, такие как Poetry и UV, не только делают упаковку намного проще, но и помогают очень удобно управлять зависимостями. UV особенно примечателен тем, что он в 10-100 раз быстрее традиционных инструментов.
Если вы хотите получить больше информации о Poetry, вы можете прочитать следующие статьи:
- Проекты Python с Poetry и VSCode. Часть 1
- Проекты Python с Poetry и VSCode. Часть 2
- Проекты Python с Poetry и VSCode. Часть 3
Для получения исчерпывающего руководства по UV, молниеносно быстрому менеджеру пакетов Python, прочтите: UV: Молниеносно быстрый менеджер пакетов Python.
Введение
Упаковка Python — это процесс подготовки вашего проекта Python к распространению и установке. Существует два основных подхода: традиционный метод с использованием setup.py и современный подход с pyproject.toml (определенный в PEP-517, PEP-518 и PEP-660).
Для получения исчерпывающего руководства по работе с путями к файлам и каталогам, что важно для управления структурой проекта, см. страницу Пути к файлам и каталогам.
Традиционный подход: setup.py
Файл setup.py находится в центре традиционного проекта Python. Он описывает все метаданные о вашем проекте. Вы можете добавить в проект довольно много полей, чтобы придать ему богатый набор метаданных, описывающих проект. Однако есть только три обязательных поля: name, version и packages. Поле name должно быть уникальным, если вы хотите опубликовать свой пакет в Python Package Index (PyPI). Поле version отслеживает различные выпуски проекта. Поле packages описывает, где вы разместили исходный код Python в вашем проекте.
Это позволяет легко устанавливать пакеты Python. Часто достаточно написать:
python setup.py install
и модуль установит себя.
Пример: setup.py
Наш первоначальный setup.py также будет включать информацию о лицензии и повторно использовать файл README.txt для поля long_description. Это будет выглядеть так:
# setup.py: define package metadata for distribution
from distutils.core import setup
setup(
name='pythonCheatsheet', # Package name (must be unique on PyPI)
version='0.1', # Version number
packages=['pipenv',], # List of packages to include
license='MIT', # License type
long_description=open('README.txt').read(), # Read description from file
)
Войдите в систему, чтобы ответить на эту викторину и отслеживать свой прогресс обучения
setup.py?Современный подход: pyproject.toml
Файл pyproject.toml является современным стандартом для конфигурации проектов Python (PEP-517, PEP-518, PEP-660). Он предоставляет унифицированный способ указания требований к системе сборки и метаданных проекта в едином декларативном формате файла.
Преимущества pyproject.toml
- Декларативный: Все метаданные проекта в одном месте
- Независимый от системы сборки: Работает с setuptools, poetry, flit и другими бэкендами сборки
- Без выполнения кода: Безопаснее и предсказуемее, чем setup.py
- Стандартизированный: Соответствует стандартам PEP для лучшей поддержки инструментов
Пример: pyproject.toml
Вот базовый пример pyproject.toml с использованием setuptools:
[build-system]
requires = ["setuptools>=61.0", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "pythonCheatsheet"
version = "0.1"
description = "A Python cheatsheet package"
readme = "README.txt"
requires-python = ">=3.8"
license = {text = "MIT"}
authors = [
{name = "Your Name", email = "your.email@example.com"}
]
classifiers = [
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
]
[project.optional-dependencies]
dev = [
"pytest>=7.0",
"black>=22.0",
]
Установка из pyproject.toml
С pyproject.toml вы можете установить свой пакет с помощью pip:
pip install .
Или в редактируемом режиме:
pip install -e .
Войдите в систему, чтобы ответить на эту викторину и отслеживать свой прогресс обучения
pyproject.toml перед setup.py?Выбор правильного подхода
- Использовать
setup.py: Если вы работаете с устаревшими проектами или вам нужен детальный контроль - Использовать
pyproject.toml: Для новых проектов (рекомендуется), так как это современный стандарт и он обеспечивает лучшую поддержку инструментов
Больше информации можно найти в официальной документации.