2025, Nov 26 09:02

Ошибка сборки pygame-ce на Debian из‑за portmidi: как решить

Обновление pygame-ce на Debian может падать из‑за зависимости portmidi в Meson. Узнайте, как установить libportmidi-dev и завершить pip install без ошибок.

Обновление pygame-ce в системе на базе Debian может завершиться ошибкой сборки Meson из‑за отсутствующей библиотеки. В выводе указано, что во время сборки недоступен portmidi, из‑за чего не удаётся подготовить wheel‑пакет и установка прерывается.

Как воспроизвести ошибку

Обычно обновление запускают так; при этом процесс может оборваться на этапе генерации метаданных:

pip install --upgrade pygame-ce

Ключевой фрагмент лога прямо указывает первопричину:

Run-time dependency portmidi found: NO (tried pkgconfig and cmake)
../meson.build:302:25: ERROR: C shared or static library 'portmidi' not found

В этом же выводе можно заметить, что используется Python 3.9, сборкой управляет Meson, а остальные зависимости определяются корректно (SDL2, SDL2_image, SDL2_mixer, SDL2_ttf, freetype). Сбой вызывает только зависимость portmidi.

Что происходит под капотом

pygame-ce собирается с помощью Meson, который находит системные библиотеки через pkg-config и CMake. В дистрибутивах семейства Debian заголовки для разработки поставляются отдельно. Если во время сборки требуется C‑библиотека, должен быть установлен пакет с суффиксом «-dev». Лог сообщает, что portmidi не найден, то есть на машине, где pip пытается собрать pygame-ce, отсутствует соответствующий пакет для разработки.

Решение и проверенные команды

На системах Debian нужно установить подходящий пакет для разработки и повторить обновление. Требуемый пакет называется libportmidi-dev.

sudo apt install libportmidi-dev

После установки запустите обновление ещё раз:

pip install --upgrade pygame-ce

Если вы работаете в виртуальном окружении, убедитесь, что пакеты для разработки стоят в системе, которая предоставляет заголовки для той версии Python, что используется в этом окружении.

Если не уверены в названии пакета, сначала поищите его в репозитории. В системах семейства Debian это помогает найти точное имя:

apt search portmidi

Почему это важно

Сборочные бэкенды вроде Meson компилируют нативные расширения и линкуют их с системными библиотеками. Если нужной библиотеки или её заголовков нет, сборка падает, хотя сам pip работает штатно. Умение читать логи — особенно строки «Run-time dependency portmidi found: NO» и финальное «C shared or static library 'portmidi' not found» — позволяет быстро поправить окружение, не обвиняя pip или версии пакетов.

Итоги

Если на Debian или Raspbian сборка pygame-ce падает из‑за portmidi, решение простое: установите libportmidi-dev и повторите обновление. Внимательно просматривайте вывод Meson, чтобы понять, какой зависимости не хватает; при необходимости ищите пакет в репозитории и следите, чтобы набор dev‑пакетов соответствовал вашей Python‑сборочной цепочке. Небольшая забота об окружении экономит массу времени при работе с пакетами, собирающими нативный код.