Неудачная компиляция wheel: действия разработчика
Основной способ: установка системных зависимостей для компиляции
Как исправить ошибку сборки wheel при установке пакета, требующего компиляции?
Наиболее частая причина ошибки - отсутствие в системе компиляторов и заголовочных файлов, необходимых для сборки C-расширений. Решение зависит от операционной системы.
Для Linux (Ubuntu/Debian):
sudo apt update
sudo apt install build-essential python3-dev libssl-dev libffi-devPython failed building wheel (ошибка сборки wheel)
После этого установка пакета через pip должна пройти успешно.
Типичные проблемы:
- Если ошибка осталась, возможно, требуется установить дополнительные пакеты, специфичные для библиотеки (например, libjpeg для Pillow, libxml2 для lxml).
- На Windows часто требуется Microsoft Visual C++ Build Tools или Visual Studio Community Edition.
- На macOS - Xcode Command Line Tools (
xcode-select --install).
Для Windows:
# Установка Build Tools для Visual Studio 2022 с компонентом "Разработка на C++"
# Скачайте с https://visualstudio.microsoft.com/ru/downloads/#build-tools-for-visual-studio-2022
# Или установите Visual Studio с соответствующей нагрузкой
Для macOS:
xcode-select --install
Решение 1: Использование предварительно собранных (бинарных) колес
Как избежать сборки пакета из исходных кодов?
Pip может загружать бинарные wheels, если они доступны. Принудительно отключить сборку можно через --only-binary:
pip install --only-binary :all: numpy
Если требуется установить и зависимости с бинарниками, можно указать pip install --only-binary :all: package. Однако это не сработает, если бинарного колеса нет для данной платформы/версии Python.
Возможные проблемы:
Если бинарное колесо отсутствует, pip выдаст ошибку "No matching distribution found". В этом случае нужно искать wheel на PyPI вручную (раздел Download files) или использовать другие методы.
Решение 2: Установка конкретной версии компилятора для Windows
Что делать, если ошибка указывает на отсутствие "cl.exe" или "Visual C++ 14.0"?
Некоторые пакеты (например, scikit-learn, cryptography) требуют определенную версию Visual Studio. Установите Microsoft Build Tools for Visual Studio 20XX с компонентом "C++ Build Tools". Затем настройте окружение через:
"%ProgramFiles(x86)%\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvars64.bat"
pip install package
Или используйте Visual Studio Installer, выбрав рабочую нагрузку "Разработка классических приложений на C++".
Проблема:
После установки Build Tools может потребоваться перезапуск терминала. Также убедитесь, что используется 64-разрядная версия, если Python 64-bit.
Решение 3: Установка пакета через conda
Как установить пакет без компиляции, используя менеджер пакетов conda?
Conda предоставляет бинарные сборки для многих научных пакетов. Пример:
conda install numpy pandas scikit-learn
Conda сама разрешает зависимости и устанавливает совместимые версии библиотек, что часто избегает ошибок сборки.
Недостатки:
- Не все пакеты доступны в conda (особенно не из Anaconda репозитория).
- Требуется установка Anaconda или Miniconda.
- Смешивание conda и pip может привести к конфликтам.
Решение 4: Установка старой версии пакета
Как временно обойти ошибку установки последней версии?
Иногда более старые версии пакетов уже имеют бинарные wheels для вашей платформы или не требуют таких современных компиляторов. Попробуйте:
pip install numpy==1.19.5
Используйте pip install package== и посмотрите список доступных версий на PyPI.
Предупреждение:
Старые версии могут иметь уязвимости или несовместимости с другими пакетами. Использовать такой подход стоит временно, пока не будет найдено полноценное решение.
Решение 5: Установка зависимостей, указанных в документации пакета
Где найти перечень библиотек, необходимых для сборки?
Многие пакеты (например, Pillow, lxml, psycopg2) требуют системные библиотеки. Перед pip install ознакомьтесь с документацией. Для Pillow на Ubuntu:
sudo apt install libjpeg8-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.6-dev tk8.6-dev python3-tk
Для psycopg2: установите libpq-dev.
Проблема:
Иногда документация устарела или предоставляет инструкции только для одной ОС. Полезно искать ошибку в интернете по названию пакета и своей системы.
Расширенные примеры и результаты
Пример 1: Ubuntu - от ошибки к успешной установке
Исходная ситуация: попытка установить numpy.
$ pip install numpy
Collecting numpy
Downloading numpy-1.26.2.tar.gz (15.8 MB)
...
Building wheel for numpy (setup.py) ... error
ERROR: Failed building wheel for numpy
Failed to build numpy
ERROR: Could not build wheels for numpy, which is required to install pyproject.toml-based projects
Устанавливаем зависимости:
$ sudo apt update && sudo apt install build-essential python3-dev -y
Результат (после pip install):
$ pip install numpy Collecting numpy Using cached numpy-1.26.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl Successfully installed numpy-1.26.2
Теперь pip использует бинарный wheel.
Пример 2: Windows - установка cryptography с Visual C++
Ошибка:
C:\> pip install cryptography
error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools"
После установки Build Tools и выполнения vcvars64.bat:
C:\> "%ProgramFiles(x86)%\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvars64.bat"
C:\> pip install cryptography
Collecting cryptography
Downloading cryptography-41.0.7-cp312-cp312-win_amd64.whl
Successfully installed cryptography-41.0.7
Обратите внимание: после настройки окружения pip загружает бинарный wheel, сборка не требуется.
Пример 3: Использование --only-binary для пакета без бинарного колеса
$ pip install --only-binary :all: pycairo
ERROR: Could not find a version that satisfies the requirement pycairo (from versions: none)
ERROR: No matching distribution found for pycairo
Это означает, что для вашей платформы бинарного колеса нет. Нужно установить системные зависимости (в Ubuntu: libcairo2-dev) и повторить без --only-binary.
$ sudo apt install libcairo2-dev $ pip install pycairo Successfully installed pycairo-1.26.0
Пример 4: Установка пакета через conda
$ conda install -c conda-forge opencv
Collecting package metadata: done
Solving environment: done
...
Downloading and Extracting Packages: done
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
Все бинарные зависимости устанавливаются автоматически.
Пример 5: Откат к старой версии, если последняя не собирается
$ pip install pandas==1.3.5
Collecting pandas==1.3.5
Downloading pandas-1.3.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Successfully installed pandas-1.3.5
Версия 1.3.5 имеет предкомпилированный wheel, а последняя версия 2.1.4 на этой платформе требовала сборки. После временного использования старой версии можно искать решение для новой.