Подклад пакет пустой

Ищешь идеальный пустой подклад пакет? Создай уникальный стиль сам! Основа для безграничной фантазии и ярких экспериментов.

Что такое «подклад пакет пустой»

В Python (а точнее, в его системе управления пакетами pip) под фразой «подклад пакет пустой» обычно понимают заглушку-пакет, состоящую из пустого каталога и минимального набора мета-файлов (__init__.py, pyproject.toml или setup.py). Такой пакет не содержит исполняемого кода, но зарегистрирован в site-packages и может быть установлен через pip install.

Зачем создавать пустой пакет-заглушку

  • Резервирование имени в PyPI — чтобы никто другой не занял «брендовое» имя.
  • Форвард-компатибилити: старый пакет foo может быть заменён на пустой, который «перенаправляет» зависимость на новый foo-new.
  • Этапная миграция — временное решение при разделении монолита на микропакеты.
  • Тестирование инфраструктуры: проверка CI/CD-пайплайнов без риска сломать реальный код.

Минимальный пример пустого пакета

Создаём структуру каталогов:

empty_stub/
├── pyproject.toml
├── src/
│ └── stub_package/
│ └── __init__.py ← пустой
└── README.md

pyproject.toml:


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

[project]
name = "stub-package"
version = "0.0.1"
description = "Пустой пакет-заглушка"
authors = [{name = "You", email = "you@example.com"}]
dependencies = []

Собираем и публикуем:

$ python -m build
$ twine upload dist/*

Как установить и проверить

  1. pip install stub-package
  2. Проверка в REPL:
    >>> import stub_package
    >>> stub_package.__file__
    .../site-packages/stub_package/__init__.py

Расширенные техники

Пакет-перенаправление

Добавляем в __init__.py:


import importlib, sys
sys.modules[__name__] = importlib.import_module('real_package')

После чего import stub_package прозрачно заменится на real_package.

Метаданные для будущих версий

В pyproject.toml можно указать deprecation-warning:


[project]
...
dynamic = ["scripts"]

[tool.setuptools.dynamic]
scripts = {file = "scripts/deprecated_warning.py"}

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

  • Забыть __init__.py → пакет не импортируется.
  • Загнать в setup.py лишние зависимости → «пустой» пакет тянет за собой километры библиотек.
  • Опубликовать с version = "0.0.0" — PyPI не позволит заменить на «настоящий» релиз без удаления.

Подклад пакет пустой — это не «пустое место», а мощный инструмент миграции и управления зависимостями. Главное помнить: даже пустой пакет должен быть чистой, документированной и однажды удалённой заглушкой, а не бессмысленным мусором в репозитории.


Удачных вам заглушек и минималистичных __init__.py!