Gibt es eine Möglichkeit, ein Python-Skript von einer Shell aus auszuführen, ohne den vollständigen Pfad zu schreiben?So führen Sie ein Python-Skript ohne Angabe des vollständigen Pfads portabel aus
Zum Beispiel in Linux, würde ich während in meinem Home-Verzeichnis
cd ~
der Lage sein, wie ein Python-Skript ausgeführt werden soll run.py genannt, die in Wort ist, ~/long/path/to/run Py, aber ich will, um sie auszuführen, indem sie einfach
python run.py
statt
python ~/long/path/to/run.py
ich für eine Art von sich hoffen würde eine Pfadliste, die mehrere Verzeichnisse enthält, genau wie die PATH-Variable, so dass python run.py die erste run.py ausführt, die sie in einem der Verzeichnisse findet.
Ich habe überlegt, run.py in eine ausführbare Datei umzuwandeln und ihr Verzeichnis die System-PATH-Variable hinzuzufügen, konnte aber keine portable Möglichkeit finden, ein Python-Skript ausführbar zu machen.
EDIT
Ein Jahr später, nachdem sie zu fragen, ich ein bisschen weniger Noob bin, und ich sehe, dass meine Frage nicht ganz klar war und nicht viel Sinn machen, so dass nach einer Frage upvote ich werde einige Dinge klären.
1) Tragbar.
Als ich das fragte, sagte ich tragbar. Wie auch immer, tragbare Geräte sind in diesem Fall nicht klar, und ich habe nicht viel Wert darauf gelegt.
den Plattformen: auf POSIX (Linux, MacOS, etc.) und Windows
dies noch machen nicht viel Sinn arbeiten sollte, da Windows
cmd.exe
verwendet und POSIXsh
verwendet, so dass jeder könnte man Führen Sie die Befehle mit einer anderen Syntax aus. Nehmen wir an, dass die tragbarste Sache darin besteht, die gleiche Eingabe sowohlsh
als auchcmd.exe
zu geben, wobei das Python-Skript in beiden Fällen ausgeführt wird. In diesem Fall könnten Sie denselben Befehl von einer ANSI Csystem
-Funktion ausführen, diesh
unter POSIX undcmd
unter Windows verwendet. ANSI C ist eines der wenigen Dinge, die Windows und POSIX gemeinsam haben, die Frage ist in diesem Fall sinnvoll.
2) Executable
Als nächstes wird der Begriff turning run.py into an executable
, ist nicht ganz klar. Damit habe ich über die Linux-Strategie von chmod +x run.py
gesprochen, füge einen Shebang #!/usr/bin/env python
hinzu und füge sein Verzeichnis dem System hinzu ~/long/path/zur PATH-Umgebungsvariable. Aber das funktioniert nicht für Windows, da Windows keine ausführbare Datei-Metadaten-Eigenschaft wie Linux unterstützt und weil/usr/bin/env nicht unbedingt in Windows existiert.
3) Verlängerung
schließlich in meinem Kopf Ich habe gehofft, eine Lösung, die nicht angibt, welche Art von Datei ausgeführt wird, so dass, wenn wir einen Tag entscheiden, es zu machen, sagt sie, eine Perl-Datei, keine Schnittstellen würden sich ändern.
Daher wäre Schreiben run.py
schlecht, weil es den Dateityp angeben würde; es wäre besser in der Lage sein, nur run
Danke FJ, das ist genau was ich gesucht habe, ich fühle es hat zwei Vorteile gegenüber dem "#!" Ansatz: 2 –
(spezifisch Entschuldigung, halbfertiger Kommentar) ... Danke F.J, das ist, was ich gesucht habe, ich habe das Gefühl, dass es zwei Vorteile gegenüber dem "#!" Ansatz: 1) nicht überlisten Skripte 2) nicht die globale PATH-Variable und die Verwendung der spezifischeren PYTHONPATH statt. Der Nachteil ist natürlich, dass man immer "python -m" eingeben muss, was viel Platz in Anspruch nimmt, und schlimmer noch, es könnte Code umschreiben, wenn man sich eines Tages entschließt, seine Python-Skripte in Bash-Skripte umzuwandeln. –
Ich versuchte python -m laufen, aber es hat nicht funktioniert ... Ich bin sicher, dass run.py in der PYTHONPATH ist, da ich es importieren kann und es zeigt, wenn ich sys importieren; sys.path drucken ... fehle ich etwas? –