Поиск по сайту:

Как исправить ошибки компилятора Python «Нет такого файла или каталога» при установке пакетов


Введение

Распространенной ошибкой, которую вы можете получить при установке модулей Python, является ошибка Нет такого файла или каталога. Это может ввести в заблуждение, потому что вы обычно не пропускаете файл или каталог из пакета, который пытаетесь установить. Вместо этого эта ошибка возникает из-за того, что Python пытается вызвать ваш системный компилятор во время установки модуля. Это связано с тем, что пути к вашему системному компилятору часто жестко закодированы в самом Python, и он не находит нужные ему файлы компилятора. В этом руководстве будет представлен пример этой ошибки и шаги по ее устранению на нескольких платформах.

Отсутствующие ошибки компилятора

Пакеты Python обычно устанавливаются с помощью диспетчера пакетов pip с помощью команды pip install. pip распечатает список зависимостей, дополнительно необходимых для выбранного вами пакета, и длинный список результатов процесса установки. Иногда программа установки завершается с ошибкой, содержащей текст, подобный следующему, в конце вывода:

Output
x86_64-linux-gnu-gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/python3.10 -I/usr/local/lib/python3.10/dist-packages/numpy/core/include -I/usr/include/python3.10 -c radiomics/src/_cmatrices.c -o build/temp.linux-x86_64-3.10/radiomics/src/_cmatrices.o error: command 'x86_64-linux-gnu-gcc' failed: No such file or directory [end of output] note: This error originates from a subprocess, and is likely not a problem with pip. error: legacy-install-failure × Encountered error while trying to install package. ╰─> pyradiomics note: This is an issue with the package mentioned above, not pip. hint: See above for output from the failure.

Эта конкретная ошибка возникла в результате попытки установить pd-dwi, библиотеку Python, используемую в исследованиях химиотерапии, с помощью pip install pd-dwi.

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

На большинстве современных платформ, когда вы устанавливаете менеджер пакетов Python, pip, он также устанавливает среду компилятора и связанные пакеты. Однако есть несколько причин, по которым это может происходить не всегда. Например, вполне возможно, что компилятор мог быть удален случайно или вообще никогда не устанавливался. И в отличие от Linux, пакеты Python обычно не устанавливаются системным менеджером пакетов на Mac или Windows, что создает больше возможностей для проблем.

Следующие шаги этого руководства содержат инструкции по установке и проверке компилятора, совместимого с Python, в Ubuntu/Debian Linux, Red Hat/Rocky Linux, Windows и macOS.

Пакеты компиляторов для Ubuntu и Debian

В Ubuntu вы можете установить пакет под названием build-essential, который предоставит все пакеты, необходимые для современной хорошо поддерживаемой среды компилятора. build-essential — это так называемый метапакет. Он не относится к какому-то одному пакету, а скорее использует ряд общих инструментов компилятора в качестве зависимостей.

Вы также можете установить libpython3-dev. Это давний пакет экосистемы Ubuntu/Debian, который, по сути, «подключает» компилятор к Python и предоставляет всю необходимую внутреннюю конфигурацию для автоматического вызова вашего компилятора из Python или из pip. Обычно это устанавливается автоматически вместе с pip, но если вы устанавливаете pip без использования менеджера пакетов, вы можете его пропустить.

Установите пакеты с помощью apt:

  1. sudo apt install build-essential libpython3-dev

Это также установит ряд зависимостей. После этого вы можете убедиться, что компилятор доступен, проверив наличие команды make в вашей системе. Для этого используйте команду what:

  1. which make
Output
/usr/bin/make

make — это команда, которую gcc, самый популярный компилятор с открытым исходным кодом, использует для разбора Makefile. каждый пакет. Если у вас теперь есть версия make, установленная на вашем пути, попробуйте снова установить модуль Python с помощью pip.

Пакеты компилятора для Red Hat и Rocky Linux

В Red Hat и Rocky Linux вы можете использовать функцию groups менеджера пакетов dnf для установки группы пакетов, включающих хорошо поддерживаемую среду компилятора. Группа пакетов, которые вы установите, называется Инструменты разработки.

Используйте две команды dnf для установки группы пакетов:

  1. sudo dnf groups mark install "Development Tools"
  2. sudo dnf groupinstall "Development Tools"

Это также установит ряд зависимостей. Затем вы можете установить python3-devel, давний пакет экосистемы Red Hat, который фактически «подключает» компилятор к Python. python3-devel предоставляет всю необходимую конфигурацию серверной части. для автоматического вызова вашего компилятора из Python или из pip:

  1. sudo dnf install python3-devel

После этого вы можете убедиться, что компилятор доступен, проверив наличие команды make в вашей системе. Для этого используйте команду what:

  1. which make
Output
/usr/bin/make

make — это команда, которую gcc, самый популярный компилятор с открытым исходным кодом, использует для разбора Makefile. каждый пакет. Если у вас теперь есть версия make, установленная на вашем пути, попробуйте снова установить модуль Python с помощью pip.

Среды компилятора Windows

Проблемы с компилятором Windows могут быть более сложными, потому что существует много разных способов установки Python, и каждый из них предполагает наличие разных компиляторов:

  • Если вы используете Python с WSL2, это похоже на запуск Python под Linux, поэтому вы можете следовать инструкциям по устранению неполадок для своего дистрибутива (по умолчанию Ubuntu).
  • Если вы используете Python с Anaconda, он предоставит свои собственные пакеты компилятора в среде conda, обычно избегая любой из этих ошибок.
  • Если вы изначально используете Python в Windows, есть несколько других соображений. По умолчанию Python в Windows пытается использовать инструменты сборки Microsoft Visual Studio. Это очень большая установка, в которую добавляется множество пакетов экосистемы Windows, которые могут быть незнакомы, если вы в основном работаете в облаке, но должны работать автоматически после установки, например при установке make в Linux.
  • Если у вас уже есть рабочая версия инструментов сборки gcc и make с открытым исходным кодом, установленных в вашей среде Windows с помощью Chocolatey, вы можете вместо этого указать Python использовать этот компилятор в Windows, создав файл в Lib/distutils/distutils.cfg относительно вашего пути установки Python и добавив следующее содержимое:

[build]
compiler=mingw32

[build_ext]
compiler=mingw32

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

Среды компилятора macOS

macOS объединяет свой инструментарий компилятора в пакет разработки Apple XCode. Как и Visual Studio для Windows, XCode — это полноценная среда разработки с собственным интерфейсом, но на самом деле вам не нужно использовать сам XCode для компиляции пакетов Python. Вместо этого вам нужно только убедиться, что установлены сами пакеты XCode. Вы можете сделать это, запустив xcode-select –install:

  1. xcode-select --install

Вам будет предложено начать установку, а затем снова будет предложено принять лицензию на программное обеспечение. Затем инструменты будут загружены и установлены автоматически.

Заключение

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

Далее вы можете просмотреть нашу серию «Как программировать на Python».