Ответ
Процесс создания и распространения пакетов (библиотек) в Python позволяет упаковать код для удобной установки и повторного использования другими разработчиками. Современный стандартный подход использует файл pyproject.toml.
Шаг 1: Структура проекта
Типичная структура пакета выглядит так:
my_awesome_package/
├── src/
│ └── my_package/
│ ├── __init__.py
│ └── module.py
├── tests/
├── pyproject.toml
├── README.md
└── LICENSE
src/my_package: Исходный код пакета.__init__.py: Обязательный файл, который помечает каталог как Python-пакет.pyproject.toml: Файл для описания метаданных проекта и зависимостей сборки.
Шаг 2: Конфигурация в pyproject.toml
Этот файл определяет, как собирать ваш пакет. Он содержит метаданные (имя, версия, автор) и зависимости.
# pyproject.toml
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"
[project]
name = "my-awesome-package"
version = "0.0.1"
authors = [
{ name="Example Author", email="author@example.com" },
]
description = "A small example package"
readme = "README.md"
requires-python = ">=3.8"
classifiers = [
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
]
# Зависимости, необходимые для работы пакета
dependencies = [
"requests>=2.20",
'importlib-metadata; python_version<"3.10"',
]
Шаг 3: Сборка пакета
Для сборки пакета используется инструмент build.
- Установите
build:pip install build - Запустите сборку в корневой директории проекта:
python -m build
Эта команда создаст директорию dist/ с двумя файлами:
my_awesome_package-0.0.1-py3-none-any.whl— Wheel-пакет. Бинарный, предустановленный формат, предпочтительный для установки.my-awesome-package-0.0.1.tar.gz— Source Archive (sdist). Архив с исходным кодом.
Шаг 4: Публикация на PyPI
Для загрузки пакета на Python Package Index (PyPI) используется инструмент twine.
- Установите
twine:pip install twine - Загрузите дистрибутивы из папки
dist/:twine upload dist/*
После этого другие пользователи смогут установить ваш пакет командой pip install my-awesome-package.