TGViewer
Python for Devs Python for Devs @python_for_devs · 801 subscribers
Post #51 457
🧩 PEP 804: как связать внешние зависимости с вашим пакетным миром

Если вы собираете Python-пакет с нативными расширениями или завязками на системные библиотеки (zlib, OpenBLAS, компиляторы, ImageMagick и т. п.), вы точно сталкивались с болью: «pip ругнулся, а что именно надо установить — непонятно».

PEP 804 закрывает эту дыру: теперь инструменты понимают внешние зависимости из вашего pyproject.toml (в формате DepURL из PEP 725) и умеют карточно их с пакетами целевой экосистемы (Ubuntu, Fedora, Homebrew, conda-forge, Nix, Spack и т. д.). В идеале — даже показывать готовую команду установки.

Сценарий: вы ставите пакет, он не собирается из-за отсутствия g++ и zlib. Вместо «гугли сам» вы видите аккуратный список для вашей системы: sudo apt install g++ zlib1g zlib1g-dev. А если вы предпочитаете conda — получите mamba install cxx-compiler zlib.

Когда внешние зависимости не формализованы, ломается все подряд:
🟣 Сборка падает: у разных дистрибутивов разные имена одних и тех же пакетов (zlib1g-dev, zlib-devel, libz), а инструкции в README устаревают быстрее, чем хотелось бы.
🟣 Документация зарастает мхом: сложно поддерживать в актуальном состоянии команды для 5–10 экосистем одновременно.
🟣 CI/релизы с задержками: «оно у меня работало» превращается в рулетку — особенно с чужим Docker-образом, или отличной от вашей OS.
🟣 Анализ зависимостей страдает: внешние требования не видны инструментам, отчего ломаются деревья зависимостей и предсказуемость обновлений.

PEP 804 нацелен искоренить эти проблемы. Вместо «надеемся, что пользователь догадается» — центральный реестр имен + прозрачные сопоставления для конкретных экосистем, поддерживаемые самими экосистемами.

Ниже — минимальный, но рабочий «скелет», который можно взять и внедрить сегодня.

Шаг 1. Опишите внешние зависимости в pyproject.toml

Раздел [external] — это ваш чек-лист для системных/не-PyPI зависимостей. Идентификаторы — это DepURL из PEP 725: dep:generic/... для конкретных библиотек и dep:virtual/... для «ролей» (например, компилятор C++).


[build-system]
build-backend = "mesonpy"
requires = ["meson-python>=0.13.1", "pybind11>=2.10.4"]

[external]
# Что нужно для сборки (toolchain, заголовки)
build-requires = [
"dep:virtual/compiler/cxx",
]

# Что нужно для линковки/исполнения
host-requires = [
"dep:generic/zlib",
]


Что это дает: любой инструмент, понимающий PEP 804/725, может на входе получить DepURL и на выходе — список пакетов для вашей ОС/менеджера пакетов.

Шаг 2. Валидируйте DepURL-ы локально

Подтяните тул, который умеет читать [external], валидировать записи и предлагать каноничные идентификаторы. Пример с условным pyproject-external:

python -m pyproject_external show --validate .

Если вы промахнулись (написали dep:virtual/compiler/cpp вместо cxx), получите подсказку вида:

Did you mean 'dep:virtual/compiler/cxx'?

Шаг 3. Получайте команды установки для вашей платформы

То, ради чего все затевалось. Покажите маппинг под «авто-определенную» экосистему (например, Ubuntu + apt) или явно выберите нужную (conda-forge + mamba/pixi):


# Показать внешние зависимости как DepURL
python -m pyproject_external show .

# Показать уже сопоставленные имена пакетов
python -m pyproject_external show --output=mapped .

# Сгенерировать команду установки
python -m pyproject_external show --output=command .
# Пример вывода:
# sudo apt install --yes g++ zlib1g zlib1g-dev python3


Подробнее: PEP 804 — An external dependency registry and name mapping mechanism: peps.python.org/pep-0804/.
  • 🔥 5
  • 👍 3
  • ❤ 2
More from @python_for_devs
  1. Sep 30, 2026Тут больше не будет новостей, статей и постов про Python. Python-разработчику сейчас важне…
  2. Jan 23, 2026⚰️ 2025 год для Flask прошёл почти без движений За год вышло всего два патч-релиза к верси…
  3. Jan 16, 2026В новой статье разбираем попытку превратить Python в формат распространения уровня «один б…
  4. Jan 13, 2026🔥 Anthropic инвестируют $1.5 млн в Python — и делают ставку на безопасность open source A…
  5. Jan 12, 2026⚡️ DuckDB разрушает мифы: 1 ТБ данных — за секунды, без Spark Принято считать, что терабай…
  6. Dec 29, 2025🎄 Итоги года 4Devs 2025 На прошлой неделе Habr опубликовал итоги года — и наш проект попа…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →