Ich bin neu in der Verwendung der Shell und wollte ein Verzeichnis erstellen, in $HOME
dem 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 .zshrc
Datei hinzugefügt:
export PATH="$HOME/python_functions/bin:$PATH"
Dann habe ich ein Skript mit dem Namen hinzugefügt sleep_plotter.py
, python_functions/bin
und 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.py
auch 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
PATH
Die 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.py
ist ein Argument für das python
Programm (den Befehl). Shell verwendet PATH
zum 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 -m
Option in Python verwenden.
In ~/.zshrc
(beachten Sie, dass dort kein „ $PATH
in“ 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 .py
Erweiterung der Python-Datei weglassen müssen.