HOWTO · Python

Python: Can't Open File 'setup.py': [Errno 2] No such File or Directory Error を解決する

この説明では、Python で File not found または No such file or directory エラーを解決する方法を学習します。

このページの内容

メッセージ python: can't open file 'setup.py': [Errno 2] No such file or directory は、コマンドで指定されたスクリプトのパスが見つからなかったことを示します。まず、コマンドが Python にどのパスを開くよう指示しているか確認してください。setup.py が現在の作業ディレクトリにない、名前が異なる、または別の場所にある可能性があります。これは、スクリプトの実行開始後に、コードが別の見つからないファイルを開こうとして発生する FileNotFoundError とは異なります。

Python が見つけられないファイルを特定する

エラー全文と実行したコマンドを一緒に確認します。Python が setup.py を開けないというメッセージなら、そのスクリプトは起動していません。コマンドのスクリプト引数と、コマンドを実行したディレクトリを調べてください。トレースバックにプログラム内の行が示され、FileNotFoundError が表示されている場合は、スクリプトは起動しています。その場合は、ファイルを開くコードを調べます。見つからないパスは setup.py ではなく、データファイル、設定ファイル、その他のリソースを指している可能性があります。

この違いによって、次に確認する内容が決まります。たとえば python setup.py install というコマンドでは、Python は setup.py というスクリプトを探します。一方、app.py の起動には成功したものの、その後 open("records.csv") で失敗した場合は、records.csv を探しています。コマンドがそのプロジェクト ファイルを必要としていると確認するまでは、ファイルを作り直さないでください。

コマンドと作業ディレクトリを確認する

相対パスは、プロセスの現在の作業ディレクトリを基準に解釈されます。この場所は、スクリプトが置かれているディレクトリや、ファイル ブラウザーに表示されるディレクトリとは異なることがあります。ターミナルでは、pwd(macOS または Linux)または cd(Windows のコマンド プロンプト)で現在のディレクトリを確認できます。プロジェクトのディレクトリに移動するには、macOS または Linux では cd /path/to/project、コマンド プロンプトでは cd /d C:\path\to\project を使います。/d オプションを付けると、必要に応じてドライブとディレクトリの両方が切り替わります。これらは説明用のパスなので、自分の環境にあるディレクトリに置き換えてください。

移動したら、そのディレクトリから目的のコマンドを実行するか、現在の場所から見た相対パスでスクリプトを指定します。たとえば、プロジェクトのルートにいて、スクリプトが src 内にある場合、スクリプトのパスは src/setup.py です。スクリプトの完全な場所が分かっていれば、絶対パスも使えます。これらはコマンドの例です。すべてのプロジェクトで setup.py を使うわけではないため、プロジェクトの説明にあるパスとコマンドを確認してください。

ファイルのパスと名前を確認する

対象のディレクトリを調べ、実際のファイル名とコマンド内のパスを正確に照合してください。macOS または Linux では ls で現在のディレクトリを一覧表示でき、ls /path/to/project で指定したディレクトリを表示できます。PowerShell では Get-ChildItem を使います。ファイル名だけでなく、パスを構成する各ディレクトリ名も確認してください。ファイルがプロジェクト内に存在していても、Python が検索するよう指示された場所にはないことがあります。

ディスク上のファイルと、スペルや大文字・小文字の使い方を照合します。ファイルシステムによっては setup.py と Setup.py が別の名前として扱われますが、そうでない場合もあります。大文字・小文字の扱いがどこでも同じだと考えず、実際の名前とパスを使ってください。ファイル名が意図したものと異なる場合は、プロジェクトの慣例に合うときに限り、コマンドを修正するかファイル名を変更します。

実行中のスクリプトでも、関連するパスの問題が起きることがあります。open("records.csv") は、プロセスの作業ディレクトリを基準にその相対パスを探します。コマンドを実行した場所に依存しないようにするには、スクリプトの場所を基準にして Path(__file__).resolve().parent / "records.csv" のようなパスを組み立てられます。この方法が適用されるのはスクリプトが開くファイルです。Python がスクリプト引数を探す方法は変わりません。

見つからない setup.py を復元または作成する

すべての Python プロジェクトで setup.py が必要なわけではありません。新しいプロジェクトでは別のビルド設定を使っていることがあり、インストール用にパッケージ化されていない場合もあります。まずリポジトリの README、インストール手順、プロジェクトのルートにあるファイルを確認してください。説明されているコマンドが setup.py を必要としないなら、プロジェクトが実際に提供しているコマンドを使います。必要なファイルであれば、名前が変更された、ダウンロードに含まれていなかった、または作業ツリーから削除された可能性を調べてください。

プロジェクトで Git を使っている場合は、何かを復元する前に、リポジトリ内で git status と git log -- setup.py を確認します。未追跡の setup.py があっても、それだけでプロジェクトに追加すべきファイルだとは限りません。また、変更済みのファイルには残しておくべき作業が含まれていることがあります。どうするか決める前に、ファイルとプロジェクトの指示を確認してください。

履歴から追跡対象のファイルが削除または変更されたと分かった場合は、復元する前に該当するコミットと現在の変更を調べます。復元すると、選択したバージョンでそのファイルの作業コピーが置き換わるため、残しておきたい編集内容を保護してください。プロジェクトの履歴にそのようなファイルがなければ、プロジェクトの文書化された要件に基づいてのみ作成します。推測で作った設定スクリプトは、依存関係やパッケージ設定に合わない可能性があります。

アクセス権を確認して修正を確かめる

パスが見つからないエラーとアクセス拒否エラーは、別の問題を示します。指定したパスにファイルが存在するのに Python が権限の問題を報告する場合は、自分のアカウントでファイルを読み取れるか、親ディレクトリにもアクセスできるかを確認します。macOS または Linux では ls -l path/to/setup.py で権限ビットを表示できます。Windows ではファイルのセキュリティ プロパティを確認するか、プロジェクトの所有者アカウントを使います。アクセス確認で権限が原因だと分かった場合に限り、権限を変更してください。管理者や sudo で実行する方法を、最初の対処にしないでください。

次の例を実行します。

from pathlib import Path
from tempfile import TemporaryDirectory

with TemporaryDirectory() as folder:
    setup_file = Path(folder) / "setup.py"
    setup_file.write_text("# project setup\n", encoding="utf-8")
    print(f"{setup_file.name}: {'found' if setup_file.is_file() else 'missing'}")
setup.py: found

この自己完結型の例では、一時的なプロジェクト ファイルを作成し、そのパスがファイルを指しているかを確認します。自分のプロジェクトでは、特定したパスに同じ存在確認を適用してください。この例は、プロジェクトに setup.py が必要であることを示すものではありません。

コマンド、ディレクトリ、またはプロジェクト ファイルを修正したら、意図した場所からプロジェクトの説明にあるコマンドを再実行します。新しいエラーが出た場合は、そこに示されたパスとトレースバックを確認し、Python がまだスクリプトを開けないのか、実行中のコードが別のリソースを開けないのかを判断してください。この違いを押さえると、プロセスが実際に必要としているファイルに絞って次の確認を進められます。