Ist es möglich, ein Python-Skript (kein Modul) in ipython auszuführen, ohne dessen Pfad anzugeben? Ich habe versucht, PYTHONPATH einzustellen, aber es scheint nur für Module zu funktionieren. Ich würde gerne ausführen
%run my_script.py
ohne in dem Verzeichnis zu sein, das die Datei enthält.
import <module>
ist im Wesentlichen das gleiche wieexec(<moduleSource>)
in JavaScript oder Perl.Antworten:
Aus dem Verzeichnis von "my_script.py" können Sie einfach Folgendes tun:
quelle
SyntaxError: invalid syntax
hier auf der Python-Konsole . Python 3.5.3 unter Debian 9. Funktioniert jedoch unter IPython.%run
liegt daran, dass es sich um einen ipython-Magiebefehl handelt, der nicht Teil der Python-Sprache selbst ist.So führen Sie ein Skript in Ipython aus
Das sollte es tun
quelle
Die
%run
Magie hat einen Parameterfile_finder
, mit dem sie den vollständigen Pfad zur auszuführenden Datei abruft (siehe hier ). Wie Sie bemerken, wird es nur im aktuellen Verzeichnis angezeigt und bei Bedarf ".py" angehängt.Es scheint keine Möglichkeit zu geben, anzugeben, welcher Dateisucher aus der
%run
Magie verwendet werden soll, aber nichts hindert Sie daran, Ihren eigenen magischen Befehl zu definieren, der%run
mit einem geeigneten Dateisucher aufgerufen wird.Als sehr böser Hack könnten Sie den Standard
file_finder
mit Ihrem eigenen überschreiben :Um ehrlich zu sein, bei der Geschwindigkeit, mit der sich die IPython-API ändert, funktioniert dies wahrscheinlich genauso wie die Definition Ihrer eigenen Magie.
quelle
In Python gibt es keinen Unterschied zwischen Modulen und Skripten. Sie können sowohl Skripte als auch Module ausführen. Die Datei muss sich auf dem Python-Pfad AFAIK befinden, da Python die betreffende Datei finden kann. Wenn Python aus einem Verzeichnis ausgeführt wird, wird das Verzeichnis automatisch zum Pythonpfad hinzugefügt.
Siehe Wie kann man ein Python-Skript am besten von einem anderen Python-Skript aus aufrufen? Weitere Informationen zu Modulen und Skripten
Es gibt auch eine eingebaute Funktion execfile (Dateiname), die macht, was Sie wollen
quelle
__name__
== '__main__
':" am Ende verwendet wirdfür Python 3.6.5
quelle
runfile()
ein Befehl vonipython
? Funktioniert bei mir nicht sofort.