Damit # #! / Usr / bin / env python` unter Windows funktioniert

14

Ich verwende Bash unter Windows, bereitgestellt von MSYS.

Ich habe versucht, eine Python-Datei mit einem Shebang von auszuführen #!/usr/bin/env python, aber ich erhalte die folgende Fehlermeldung:

/usr/bin/env: python: No such file or directory

Was kann ich tun, damit dies funktioniert?

Ich weiß, dass ich die Python-Datei durch pythonSuffixen starten kann , aber ich möchte, dass sie auch ohne das Suffix funktioniert.

Ram Rachum
quelle

Antworten:

8

Verwenden Sie stattdessen den richtigen Pfad, in dem Python installiert ist, zum Beispiel:

#!c:/Python/python.exe

Wenn Sie Unix-ähnliche Pfadunterstützung auf Ihrem System haben (ich bin mit MSYS nicht vertraut), können Sie jederzeit den Pfad zu Ihrer pythonausführbaren Datei eingeben , dh die Ausgabe von which python.

Daniel Beck
quelle
2
Oder Sie könnten verwenden env, wie es der Fragesteller tut.
Ignacio Vazquez-Abrams
Ich kann den Shebang nicht ändern, er ist Teil eines Projekts, an dem andere Programmierer beteiligt sind, die unter Linux und Mac arbeiten.
Ram Rachum
@ RamRachum Was ist die Ausgabe von which envund which pythonund type python?
Daniel Beck
0

Was passiert beim Ausführen (von der Shell):

$ /usr/bin/env python

..?

Wenn eine interaktive Python-Sitzung gestartet wird, kann Python gefunden werden. (Sie können auch einfach ausführen :) type python. Wenn "keine solche Datei oder kein solches Verzeichnis" gedruckt pythonwird, wird es in Ihrem PFAD nicht gefunden. Überprüfen Sie, ob Folgendes optimiert werden kann, um das Problem zu beheben (Leerzeichen im Pfad / to / python verursachen wahrscheinlich Probleme):

$ export PATH=$PATH:/path/to/python
$ /usr/bin/env python
Michael
quelle
0

Es stellte sich heraus, dass die activate.shDatei von Virtualenv und MSYSGIT nicht übereinstimmen. Es war nie beabsichtigt, unter Windows zu arbeiten.

Ram Rachum
quelle
0

Neueste Versionen von Windows 10 unterstützen die Installation von Linux-Subsystemen. Wenn Sie von dort laufen, sollten die Pfade korrekt sein.

Es sollte eine funktionierende Lösung sein, wenn Sie damit einverstanden sind.

Greif
quelle
0

Die Wurzel des Problems ist , dass Räume in Bauden als Zufuhr zusätzliche Argumente zu einem ausführbaren interpretiert werden, so C:\Program Files\Python\python.exewerden , wie gesehen C:\Programgegeben Files\Python\python.exeals Argument.

Die beste Lösung dafür, da Windows Leerzeichen im $HOMEVerzeichnis und an Program Filesanderen Stellen LIEBT, obwohl es in cmd.exe und Powershell und anderen Tools wirklich Probleme verursachen kann, ist:

Installieren Sie Python C:\Pythonund fügen Sie den C:\PythonOrdner, in dem sich python.exedas ScriptsVerzeichnis befindet, und das darin befindliche Verzeichnis Ihrer PATHUmgebungsvariablen auf System- oder Benutzerebene hinzu.

Wenn Sie Python 2.7.x und 3.x zu koexistieren müssen, installieren Sie sie in C:\Python27und C:\Python36und C:\Python37und benennen Sie die python.exezu python2.exe, python36.exe, python37.exe, etc. und jeder dieser Ordner und deren fügen ScriptsOrdner in die PATH. Möglicherweise möchten Sie festlegen, welche der Python 3-Versionen Sie als "Standard" verwenden möchten, und in diesem Ordner eine Kopie erstellen python3.exe, um alle verwendeten Skripts zu verarbeiten !#/usr/bin/env python3.

Wenn in Ihrem Benutzer-Ausgangsverzeichnis ein Leerzeichen vorhanden ist, können auch Probleme auftreten, wenn Sie die pip install --user somepackageSyntax verwenden. Die --userStandardeinstellungen sind Ihr Ausgangsverzeichnis, und der Speicherplatz wird auch in diesem Fall die Dinge auslösen. Die Problemumgehung wird hier beschrieben , läuft jedoch darauf hinaus, PYTHONUSERBASE in Ihre Umgebung zu exportieren.

export PYTHONUSERBASE=/myappenv
pip install --user SomePackage

oder in Windows (Powershell):

$env:PYTHONUSERBASE='C:\PythonPkgs'
pip install --user SomePackage
dragon788
quelle