HOWTO · Python
Lösen Sie Python: Datei `setup.py` kann nicht geöffnet werden: [Errno 2] No Such File or Directory Error
Wir werden mit dieser Erklärung lernen, wie man den Fehler `Datei nicht gefunden` oder `Keine solche Datei oder Verzeichnis` in Python löst.
Auf dieser Seite
Die Meldung python: can't open file 'setup.py': [Errno 2] No such file or directory bedeutet, dass Python den im Befehl angegebenen Skriptpfad nicht finden konnte. Prüfen Sie zuerst, welchen Pfad Python öffnen soll: setup.py fehlt möglicherweise im aktuellen Arbeitsverzeichnis, hat einen anderen Namen oder liegt an einem anderen Ort. Das ist etwas anderes als FileNotFoundError, den ein Skript auslöst, nachdem es gestartet wurde und der darin ausgeführte Code versucht, eine andere, fehlende Datei zu öffnen.
Feststellen, welche Datei Python nicht findet
Lesen Sie die vollständige Fehlermeldung zusammen mit dem Befehl. Wenn Python laut Meldung setup.py nicht öffnen kann, wurde dieses Skript nicht gestartet. Prüfen Sie daher das Skriptargument des Befehls und das Verzeichnis, aus dem Sie ihn ausgeführt haben. Nennt ein Traceback dagegen eine Zeile in Ihrem Programm und zeigt FileNotFoundError, wurde das Skript gestartet. Untersuchen Sie dann zunächst den darin enthaltenen Dateizugriff. Der fehlende Pfad kann in diesem Fall zu einer Datendatei, Konfigurationsdatei oder einer anderen Ressource gehören und nicht zu setup.py.
Dieser Unterschied bestimmt, was als Nächstes zu prüfen ist. Ein Befehl wie python setup.py install weist Python an, ein Skript namens setup.py zu finden. Startet app.py erfolgreich, scheitert später aber bei open("records.csv"), wird nach records.csv gesucht. Erstellen Sie keine Projektdatei neu, bevor Sie bestätigt haben, dass der Befehl sie tatsächlich benötigt.
Befehl und Arbeitsverzeichnis prüfen
Relative Pfade beziehen sich auf das aktuelle Arbeitsverzeichnis des Prozesses. Dieses kann sich vom Verzeichnis des Skripts oder von dem in einem Dateibrowser angezeigten Verzeichnis unterscheiden. In einem Terminal zeigt pwd (macOS oder Linux) oder cd (Windows-Eingabeaufforderung) das aktuelle Verzeichnis an. Wechseln Sie mit cd /path/to/project unter macOS oder Linux oder mit cd /d C:\path\to\project in der Windows-Eingabeaufforderung zum Projektverzeichnis. Die Option /d wechselt bei Bedarf sowohl das Laufwerk als auch das Verzeichnis. Ersetzen Sie diese Beispielpfade durch den Pfad auf Ihrem Rechner.
Führen Sie den vorgesehenen Befehl anschließend aus diesem Verzeichnis aus oder geben Sie Python den Pfad zum Skript relativ zum aktuellen Standort an. Liegt das Skript beispielsweise im Ordner src unterhalb des Projektverzeichnisses, lautet der Skriptpfad src/setup.py. Wenn Sie den vollständigen Speicherort des Skripts kennen, können Sie auch einen absoluten Pfad verwenden. Dies sind nur Beispiele: Verwenden Sie den für Ihr Projekt dokumentierten Pfad und Befehl, denn nicht jedes Projekt nutzt setup.py.
Dateipfad und Dateinamen überprüfen
Sehen Sie im Zielverzeichnis nach und vergleichen Sie den genauen Dateinamen mit dem Pfad in Ihrem Befehl. Unter macOS oder Linux listet ls den Inhalt des aktuellen Verzeichnisses auf; mit ls /path/to/project wird ein bestimmtes Verzeichnis angezeigt. In PowerShell verwenden Sie Get-ChildItem. Prüfen Sie neben dem Dateinamen auch jeden Bestandteil des Verzeichnispfads: Eine Datei kann im Projekt vorhanden sein, ohne sich an dem Ort zu befinden, an dem Python sie sucht.
Vergleichen Sie Schreibweise und Groß- und Kleinschreibung mit dem Dateinamen auf dem Datenträger. Manche Dateisysteme behandeln setup.py und Setup.py als unterschiedliche Namen, andere möglicherweise nicht. Verwenden Sie den tatsächlichen Namen und Pfad, statt überall dasselbe Verhalten bei der Groß- und Kleinschreibung vorauszusetzen. Hat die Datei einen anderen beabsichtigten Namen, passen Sie den Befehl an oder benennen Sie die Datei nur dann um, wenn dies den Konventionen des Projekts entspricht.
Bei einem laufenden Skript gibt es ein ähnliches Pfadproblem: open("records.csv") sucht diesen relativen Pfad ausgehend vom Arbeitsverzeichnis des Prozesses. Damit das Skript nicht davon abhängt, von wo aus der Befehl gestartet wurde, kann es einen Pfad relativ zu seinem eigenen Speicherort erstellen: Path(__file__).resolve().parent / "records.csv". Das betrifft Dateien, die das Skript öffnet. Es ändert nicht, wie Python das Skriptargument selbst findet.
Fehlende setup.py wiederherstellen oder neu erstellen
Nicht jedes Python-Projekt benötigt setup.py. Moderne Projekte verwenden möglicherweise eine andere Build-Konfiguration oder sind nicht für die Installation als Paket vorgesehen. Prüfen Sie zuerst die README-Datei, die Installationsanweisungen und die Dateien im Projektstammverzeichnis. Fordert der dokumentierte Befehl setup.py nicht an, verwenden Sie den tatsächlich vom Projekt vorgesehenen Befehl. Wird die Datei benötigt, prüfen Sie, ob sie umbenannt, beim Herunterladen ausgelassen oder aus dem Arbeitsverzeichnis entfernt wurde.
Verwendet das Projekt Git, prüfen Sie im Repository vor einer Wiederherstellung git status und git log -- setup.py. Eine nicht nachverfolgte setup.py ist nicht automatisch eine Projektdatei, die hinzugefügt werden sollte; eine geänderte Datei kann außerdem Arbeit enthalten, die Sie behalten möchten. Sehen Sie sich die Datei und die Projekthinweise an, bevor Sie entscheiden, was zu tun ist.
Zeigt die Versionsgeschichte, dass eine nachverfolgte Datei gelöscht oder geändert wurde, prüfen Sie den betreffenden Commit und Ihre aktuellen Änderungen, bevor Sie sie wiederherstellen. Beim Wiederherstellen wird die Arbeitskopie dieser Datei durch die ausgewählte Version ersetzt. Sichern Sie daher alle Änderungen, die Sie behalten möchten. War eine solche Datei in der Projektgeschichte nie vorhanden, erstellen Sie sie nur anhand der dokumentierten Anforderungen des Projekts neu. Ein geratenes Setup-Skript passt möglicherweise nicht zu den Abhängigkeiten oder der Paketkonfiguration.
Zugriff prüfen und die Korrektur bestätigen
Ein Fehler wegen eines fehlenden Pfads und eine Meldung über verweigerten Zugriff weisen auf unterschiedliche Probleme hin. Existiert die Datei am angeforderten Pfad, meldet Python aber ein Berechtigungsproblem, prüfen Sie, ob Ihr Konto sie lesen darf und ob der Zugriff auf die übergeordneten Verzeichnisse erlaubt ist. Unter macOS oder Linux zeigt ls -l path/to/setup.py die Berechtigungsbits an. Unter Windows können Sie die Sicherheitseigenschaften der Datei prüfen oder das Konto verwenden, dem das Projekt gehört. Ändern Sie Berechtigungen nur, wenn die Zugriffsprüfung sie als Ursache erkennen lässt. Die Ausführung als Administrator oder mit sudo sollte nicht die Standardlösung sein.
Führen Sie dieses Beispiel aus:
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
Dieses eigenständige Beispiel erstellt eine temporäre Projektdatei und prüft, ob der Pfad auf eine Datei verweist. Die Ausgabe setup.py: found bedeutet, dass die Beispieldatei unter diesem Pfad gefunden wurde. Das Ausgabelabel found bleibt im unveränderten Beispiel Englisch. Wenden Sie dieselbe Existenzprüfung auf den Pfad an, den Sie für Ihr Projekt ermittelt haben. Das Beispiel belegt nicht, dass Ihr Projekt eine setup.py enthalten sollte.
Korrigieren Sie den Befehl, das Verzeichnis oder die Projektdatei und führen Sie anschließend den dokumentierten Projektbefehl erneut vom vorgesehenen Speicherort aus. Erscheint ein neuer Fehler, verwenden Sie den darin genannten Pfad und das Traceback, um festzustellen, ob Python weiterhin das Skript nicht öffnen kann oder ob der laufende Code eine andere Ressource nicht öffnen kann. So richtet sich die nächste Prüfung nach der Datei, die der Prozess tatsächlich benötigt.