HOWTO · Python
修正コマンド cl.exe が失敗しました: Windows にそのようなファイルまたはディレクトリはありません
このチュートリアルでは、Windowsで `cl.exe` が見つからないために発生するエラーへの対処方法を説明します。
このページの内容
Windowsで pip が error: command 'cl.exe' failed: no such file or directory と報告する場合、通常はパッケージがソースからビルドされており、そのビルド処理がMicrosoftのC/C++コンパイラを見つけられていません。C++ツールがインストールされていなければ追加し、その後、コンパイラがそのセッションで使えるように設定するVisual Studio開発者用コマンドプロンプトから pip を実行してください。Pythonのバージョンに対応するビルド済みwheelを提供しているパッケージなら、ローカルにコンパイラがなくてもインストールできる場合があります。
pip が cl.exe を見つけられないと報告する理由
互換性のあるビルド済みパッケージがある場合、pip はwheelをインストールします。そうでなければ、パッケージをソースからビルドすることがあります。Pythonバインディングなどのネイティブコンポーネントを含むパッケージでは、ビルド時にCまたはC++コンパイラが必要です。Windowsでは、Microsoft Visual C++のコンパイラ実行ファイルが cl.exe です。
このメッセージは、ビルドコマンドが cl.exe を起動しようとしたものの、現在の環境内で見つけられなかったことを示します。コンパイラの構成要素がインストールされていない場合や、使用中のターミナルでコンパイラを見つけられるように環境が設定されていない場合に発生します。このメッセージだけでPythonや pip の不具合とは判断できません。また、コンパイラをインストールしても、パッケージの非対応バージョンや依存関係の不足など、無関係なエラーは解決しません。
Microsoft C++ ビルドツールをインストールする
Visual Studioがすでにインストールされている場合は、Visual Studio Installerを開き、そのインストール項目の Modify を選択して、Desktop development with C++ ワークロードを選びます。C++ビルドツールが含まれていることを確認してから、変更を適用してください。このワークロードには、ネイティブパッケージのビルドに使うコンパイラや関連ツールが含まれています。
Visual Studioの統合開発環境全体が必要でなければ、MicrosoftのBuild ToolsダウンロードページからVisual Studio Build Toolsをインストールできます。インストーラーでC++ビルドツールのワークロードと、対象アーキテクチャに必要なコンポーネントを選択してください。インストーラーの表示名はリリースによって異なる場合があります。セットアップを完了する前に、MSVCコンパイラツールが選択されていることを確認してください。
ワークロードをインストールすると、コンピューター上でコンパイラを使えるようになります。ただし、通常のターミナルではコンパイラを見つけられるように環境が設定されていないことがあります。次の手順では開発者用コマンドプロンプトを使い、バージョン固有のコンパイラディレクトリをシステムの PATH にコピーする方法は避けてください。
設定済みの開発者環境から pip を実行する
スタートメニューから、C++ツールとともにインストールされたVisual Studioの Developer Command Prompt または Native Tools Command Prompt を開きます。64ビット版Pythonにはx64プロンプトを、32ビット版には対応するx86プロンプトを選んでください。このプロンプトは、コンパイラを見つけるためのパスなどの環境変数を、そのターミナルのセッション用に設定します。すでに開いているすべてのコマンドプロンプトやPowerShellのウィンドウが変更されるわけではありません。
必要であれば、このプロンプトでプロジェクトのディレクトリに移動し、エラーが発生したときと同じ pip install package-name コマンドを実行します。インストール先にしたいパッケージ環境に対応するPython環境を使ってください。たとえば、普段仮想環境を使っている場合は、設定済みのプロンプトでその仮想環境を有効にしてから pip を実行します。その後に新しく通常のターミナルを開いても、開発者用プロンプトの設定は引き継がれません。
コンパイラを確認し、残りのビルドエラーを診断する
インストールを再試行する前に、選んだプロンプトで where cl を実行し、コンパイラが見つかるか確認してください。Windowsから cl.exe のパスが表示されるはずです。ファイルが見つからないと表示された場合は、C++ワークロードのインストールが完了していることを確認し、対応する開発者用プロンプトを開き直してください。プロンプトのアーキテクチャが、使用中のPythonインタープリターに合っているかも確認します。推測したコンパイラのパスを手動で追加しないでください。
where cl でコンパイラが見つかるのに pip が同じコマンド未検出のメッセージを出す場合は、インストール処理がそのプロンプト内で実行され、目的のPython環境が有効になっていることを確認してください。そのうえで、ビルドログ全体を調べます。パッケージが別のビルドツールを呼び出している場合や、追加コンポーネントを必要とするコンパイラ設定を使っている場合があります。
エラーがC++の診断メッセージ、ヘッダーファイルの不足、またはパッケージ固有のビルドエラーに変わった場合は、コンパイラの検出はできており、問題はビルドの後続段階にあります。出力全体から最初の実質的なエラーを確認し、パッケージのインストール手順と、使用中のPythonバージョンおよびプラットフォームに対応するwheelが提供されているかを調べてください。cl.exe が見つかるだけで、すべてのパッケージをソースから正常にビルドできるとは限りません。