echo $PATH zeigt den Pfad zu Python-Skripten, diese können jedoch nicht ausgeführt werden

echo $PATH zeigt den Pfad zu Python-Skripten, diese können jedoch nicht ausgeführt werden

Ich bin neu in der Verwendung der Shell und wollte ein Verzeichnis erstellen, in $HOMEdem ich alle meine Python-Skripte ablegen und einen Pfad zu diesem Verzeichnis festlegen kann, sodass ich in jeden Ordner auf meinem Mac gehen und diese Skripte für bestimmte Dateien ausführen kann, ohne dass das Skript im selben Verzeichnis enthalten sein muss wie die Datei, die als Eingabe für diese Skripte dienen soll.

Ich habe mich umgelesen und dies zu meiner .zshrcDatei hinzugefügt:

export PATH="$HOME/python_functions/bin:$PATH"

Dann habe ich ein Skript mit dem Namen hinzugefügt sleep_plotter.py, python_functions/binund dort werde ich auch alle meine zukünftigen Skripte ablegen.

Wenn ich jedoch zu dem Ordner navigiere, der die Textdatei enthält, die ich als Eingabe für dieses Skript verwenden möchte, und eingebe python sleep_plotter.py 113testCtM113.txt, wobei das letzte Argument die Textdatei-Eingabe für mein Skript ist, erhalte ich die folgende Fehlermeldung:

python: can't open file 'sleep_plotter.py': [Errno 2] No such file or directory

Aber wenn ich den Pfad mit aufrufe echo $PATH, sehe ich Folgendes:

/Users/myname/python_functions/bin: 

Daraus habe ich geschlossen, dass Python in diesem Verzeichnis sucht, wenn ich einen Python-Befehl ausführe. Daher sollte es sleep_plotter.pyauch ausgeführt werden können, wenn ich mich in einem anderen Ordner befinde, der diese Datei nicht enthält.

Ich verwende Mac OSX 10.11.2, zsh und Anaconda 2.3.0.

Antwort1

PATHDie Variable definiert die Verzeichnisse, die bei der Ausführung von Befehlen durchsucht werden. Wenn Sie jedoch ausführen python sleep_plotter.py 113testCtM113.txt, sleep_plotter.pyist ein Argument für das pythonProgramm (den Befehl). Shell verwendet PATHzum Suchen python, aber nicht dessen Argumente.

Sie können Ihrem Skript ein ausführbares Attribut hinzufügen:

$ chmod +x /Users/myname/python_functions/bin/sleep_plotter.py

Füge hinzu einsiebangSequenz an den Anfang (erste Zeile) Ihres Python-Skripts:

#!/usr/bin/env python

Und führen Sie das Skript direkt als Befehl aus:

$ sleep_plotter.py 113testCtM113.txt

Antwort2

Wenn Sie Python erweitern möchten, um zusätzliche Verzeichnisse zu durchsuchen, müssen Sie zwei Dinge tun: die Variable PYTHONPATH festlegen und die -mOption in Python verwenden.

In ~/.zshrc(beachten Sie, dass dort kein „ $PATHin“ steht):

export PYTHONPATH="$HOME/python_functions/bin"

Und verwenden Sie im Terminal:

python -m sleep_plotter 113testCtM113.txt

Das ist genauso viel Tipparbeit wie vorher, weil Sie die .pyErweiterung der Python-Datei weglassen müssen.

verwandte Informationen