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‑сборочной цепочке. Небольшая забота об окружении экономит массу времени при работе с пакетами, собирающими нативный код.