Каков процесс создания и распространения пакетов в Python

«Каков процесс создания и распространения пакетов в Python» — вопрос из категории Библиотеки и модули, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Процесс создания и распространения пакетов (библиотек) в 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.

  1. Установите build:
    pip install build
  2. Запустите сборку в корневой директории проекта:
    python -m build

Эта команда создаст директорию dist/ с двумя файлами:

  • my_awesome_package-0.0.1-py3-none-any.whlWheel-пакет. Бинарный, предустановленный формат, предпочтительный для установки.
  • my-awesome-package-0.0.1.tar.gzSource Archive (sdist). Архив с исходным кодом.

Шаг 4: Публикация на PyPI

Для загрузки пакета на Python Package Index (PyPI) используется инструмент twine.

  1. Установите twine:
    pip install twine
  2. Загрузите дистрибутивы из папки dist/:
    twine upload dist/*

После этого другие пользователи смогут установить ваш пакет командой pip install my-awesome-package.