Haben Sie jemals versucht, eine Python-Datei mit relativem Import auf PyCharm auszuführen, und es hat nicht funktioniert?
TL;DR
$ModuleSdkPath$
-c "import os,runpy;runpy.run_module('.'.join(r'$FilePathRelativeToSourcepath$'.replace(os.sep,'.').split('.')[:-1]),{},__name__,1)"
$Sourcepath$
Stellen Sie den Quellenstamm richtig ein und fügen Sie externe Tools mit den obigen Einstellungen hinzu.
Erstellen Sie beispielsweise die folgende Datei in Ihrem eigenen Paket mit dem Namen "my_pkg".
my_pkg/foo.py
x = 42
my_pkg/bar.py
from .foo import x
if __name__ == '__main__':
print(x)
Wenn ich my_pkg / bar.py mit PyCharm öffne und es einfach ausführe, erhalte ich die folgende Ausnahme.
/usr/bin/python3 /tmp/my_pkg/bar.py
Traceback (most recent call last):
File "/tmp/my_pkg/bar.py", line 1, in <module>
from .foo import x
ModuleNotFoundError: No module named '__main__.foo'; '__main__' is not a package
Process finished with exit code 1
Der Grund wird im Artikel hier ausführlich erläutert.
Zusammenfassend funktioniert es einwandfrei, wenn Sie es mit der Option -m
und dem vollständig qualifizierten Namen des Moduls ( my_pkg.bar
) ausführen.
# ERROR!!
/usr/bin/python3 /tmp/my_pkg/bar.py
# OK
cd /tmp
/usr/bin/python3 -m my_pkg.bar
Mit anderen Worten, Sie können PyCharm irgendwie dazu bringen, im Optionsformat -m
ausgeführt zu werden.
Sie können es im Optionsformat -m
ausführen, indem Sie es wie in der Abbildung unten gezeigt einstellen.
Diese Methode hat jedoch das sehr ernste Problem, dass ** diese Einstellung jedes Mal vorgenommen werden muss, wenn Sie sie ausführen möchten **.
PyCharm verfügt über eine Funktion zur Verarbeitung externer ausführbarer Dateien. Nutzen Sie diese Funktion. Es ist ein wenig nervig, aber der Vorteil ist, dass Sie es nur einmal einstellen müssen und es in allen Projekten verwendet werden kann.
Gehen Sie in der Menüleiste zu Datei → Einstellungen → Extras → Externe Tools, um neue externe Tools hinzuzufügen.
Bitte stellen Sie den Teil Werkzeugeinstellungen wie folgt ein.
$ModuleSdkPath$
-c "import os,runpy;runpy.run_module('.'.join(r'$FilePathRelativeToSourcepath$'.replace(os.sep,'.').split('.')[:-1]),{},__name__,1)"
$Sourcepath$
Alles was Sie tun müssen, ist mit der rechten Maustaste auf das übergeordnete Verzeichnis von "my_pkg" zu klicken und es als Sources Root zu registrieren.
Klicken Sie bei geöffneter bar.py in der Menüleiste auf Tool-> Externe Tools-> Python -m. Wenn Sie es richtig machen können, sind Sie erfolgreich. Wenn Sie es häufig verwenden, ist es bequem, eine Tastenkombination zuzuweisen.