パッケージのインストール時にPythonの「ファイルやディレクトリが存在しない」というコンパイラーエラーを修正する方法は?
イントロダクション
Pythonモジュールのインストール時によく発生するエラーは、「ファイルまたはディレクトリが存在しません」というエラーです。これは誤解を招くかもしれませんが、通常はインストールしようとしているパッケージのファイルやディレクトリが欠落しているわけではありません。代わりに、このエラーはPythonがモジュールのインストール中にシステムのコンパイラを呼び出そうとしているために発生します。これは、システムのコンパイラへのパスがPython自体にハードコードされており、必要なコンパイラファイルが見つからないためです。このチュートリアルでは、このエラーの例と、複数のプラットフォームで修正する手順を提供します。
コンパイラエラーが見つかりません
通常、Pythonのパッケージはpipパッケージマネージャーとpip installコマンドを使用してインストールされます。pipは、選択したパッケージに追加で必要な依存関係のリストと、インストールプロセスからの長い出力リストを表示します。時には、インストーラーがエラーで終了し、出力の最後近くに以下のようなテキストを含んでいます。
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.
この特定のエラーは、化学療法の研究で使用されるPythonライブラリであるpd-dwiを、pip install pd-dwiコマンドを使用してインストールしようとした結果です。
特に科学計算に使用される一部のPythonライブラリは、インストール後にローカルのマシンで追加のコードをコンパイルする必要があります。Pythonは高レベルなインタプリタ言語であり、Pythonインタプリタ自体があれば実行できます。高パフォーマンス処理のためにPythonライブラリが含むCやRustなどの低レベル言語は、実行可能になる前にコンパイルと最適化が必要です。システムにコンパイラが存在しない場合、インストールは失敗します。
ほとんどの現代のプラットフォームでは、Pythonのパッケージマネージャーであるpipをインストールすると、コンパイラ環境と関連するパッケージも設定されます。ただし、常にこの状況が発生するわけではありません。たとえば、コンパイラが誤ってアンインストールされた可能性がある、または最初からインストールされていない可能性があります。そして、Linuxとは異なり、MacやWindowsでは通常、システムのパッケージマネージャーからPythonパッケージはインストールされないため、トラブルの可能性が増えます。
このチュートリアルの以下の手順では、Ubuntu/Debian Linux、Red Hat/Rocky Linux、Windows、そしてmacOSでPythonに対応したコンパイラをインストールおよび検証する手順が説明されます。
UbuntuとDebian向けのコンパイラパッケージ
Ubuntuでは、モダンでサポートされているコンパイラ環境に必要なすべてのパッケージを提供するbuild-essentialというパッケージをインストールすることができます。build-essentialはメタパッケージとして知られています。これは特定のパッケージを指すのではなく、一連の一般的なコンパイラツールを依存関係として引き込みます。
libpython3-devもインストールすることができます。これは、基本的にはコンパイラをPythonに接続する必要なバックエンドの設定を提供し、Pythonやpipから自動的にコンパイラを呼び出すために必要です。通常は、pipと一緒に自動的にインストールされますが、パッケージマネージャを使わずにpipをインストールする場合には見逃すことがあります。
次のようにaptを使用してパッケージをインストールします。
- sudo apt install build-essential libpython3-dev
これにより、いくつかの依存関係もインストールされます。その後、システム上でmakeコマンドが存在するかどうかを確認して、コンパイラが利用可能かどうかを確認することができます。そのためには、whichコマンドを使用してください。
- which make
/usr/bin/make
gccという最も人気のあるオープンソースコンパイラは、Makefileを解析するために使用するコマンドです。Makefileは各パッケージ内でコンパイルの指示が提供される方法です。もし今、makeのバージョンがパスにインストールされている場合は、pipを使ってPythonモジュールを再度インストールしてみてください。
レッドハットとRocky Linux向けのコンパイラーパッケージ
Red HatとRocky Linuxでは、dnfパッケージマネージャーのグループ機能を使用して、サポートが充実しているコンパイラ環境を含むパッケージのグループをインストールすることができます。インストールするパッケージのグループの名前は「Development Tools」と呼ばれています。
パッケージグループをインストールするために、2つのdnfコマンドを使用してください。
- sudo dnf groups mark install “Development Tools”
- sudo dnf groupinstall “Development Tools”
これにより、いくつかの依存関係もインストールされます。次に、python3-develをインストールすることができます。このパッケージは、長年にわたってRed Hatエコシステムで使用されてきたもので、基本的にはコンパイラをPythonに接続するためのものです。python3-develは、Pythonやpipからコンパイラを自動的に呼び出すために必要なバックエンドの設定を提供します。
- sudo dnf install python3-devel
後で、システム上でmakeコマンドが存在するかどうかを確認して、コンパイラが利用可能であることを検証することができます。そのためには、whichコマンドを使用してください。
- which make
/usr/bin/make
gccという最も人気のあるオープンソースのコンパイラが使用するコマンドはmakeです。Makefileは各パッケージ内でコンパイル指示が提供される方法です。もし今パスにmakeのバージョンがインストールされているなら、pipを使用してPythonモジュールを再度インストールしてみてください。
Windowsコンパイラ環境
Windows上でのコンパイラの問題はやや複雑です。Pythonをインストールする方法はさまざまであり、それぞれの方法では異なるコンパイラの存在を期待しています。
- If you use Python with WSL2, it’s just like running Python under Linux, so you can follow the troubleshooting instructions for your distro (Ubuntu by default).
- If you use Python with Anaconda, it will provide its own compiler packages within the conda environment, usually avoiding any of these errors in the first place.
- If you use Python on Windows natively, there are a few other considerations. By default, Python on Windows tries to use the Microsoft Visual Studio Build Tools. This is a very large install and adds many Windows ecosystem packages that may be unfamiliar if you mostly work in the cloud, but should work automatically after installation, like installing make on Linux.
- If you already have a working version of open-source gcc and make build tooling installed in your Windows environment using MinGW or Chocolatey, you can tell Python to use this compiler on Windows instead, by creating a file at Lib/distutils/distutils.cfg relative to your Python install path and adding the following contents:
「Lib/distutils/distutils.cfgは、設定ファイルです。」
[build]
compiler=mingw32
[build_ext]
compiler=mingw32
Windowsでコンパイラのインストールに問題がある場合は、代わりにインストールしようとしているライブラリの事前にコンパイルされたウィールパッケージをインストールしてみることができます。ただし、これはpipからのインストールよりも便利ではなく、通常は臨時的な提供のみです。
MacOSのコンパイラ環境
macOSは、Appleの開発スイートであるXCodeにコンパイラツールチェーンをまとめています。WindowsのVisual Studioのように、XCodeは独自のインタフェースを持つ完全な開発環境ですが、PythonパッケージをコンパイルするためにXCode自体を使用する必要はありません。代わりに、XCodeパッケージがインストールされていることを確認する必要があります。これは、xcode-select –installを実行することで行うことができます。
- xcode-select –install
インストールを開始するよう促されます。そして、ソフトウェアのライセンスを受け入れるよう再度促されます。その後、ツールが自動的にダウンロードされ、インストールされます。
結論
Pythonのエコシステムは非常に強力であり、初心者から上級開発者まで歓迎していますが、ツールの整備に関する障害に遭遇することは混乱を引き起こす場合があります。このチュートリアルでは、コンパイラパッケージが不足していることによって生じるエラーや、Pythonがモジュールのインストール時に低レベルのコードをコンパイルする必要がある場合に、それらのエラーを修正する方法を学習しました。
次に、弊社のPythonでのコーディング方法シリーズを repサイト 確認してみてください。