Führen Sie eine Python-Datei mit relativem Import in PyCharm aus

Haben Sie jemals versucht, eine Python-Datei mit relativem Import auf PyCharm auszuführen, und es hat nicht funktioniert?

TL;DR

Stellen Sie den Quellenstamm richtig ein und fügen Sie externe Tools mit den obigen Einstellungen hinzu.

Das Problem, das Sie lösen möchten

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

Ursache

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.

Lösung 1. Seien Sie ehrlich mit den Konfigurationseinstellungen bearbeiten

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 **.

edit_configurations.png

edit_configurations2.png

Lösung 2. Verwenden Sie externe Tools

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.

Neue externe Tools erstellen

Gehen Sie in der Menüleiste zu Datei → Einstellungen → Extras → Externe Tools, um neue externe Tools hinzuzufügen.

external_tools.png

external_tools2.png

Bitte stellen Sie den Teil Werkzeugeinstellungen wie folgt ein.

Quellen Stammeinstellungen

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.

external_tools3.png

Lauf

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.

Recommended Posts

Führen Sie eine Python-Datei mit relativem Import in PyCharm aus
Lesen Sie die Datei in Python mit einem relativen Pfad aus dem Programm
Führen Sie Python mit PyCharm aus (Windows)
Ein Memorandum zum Ausführen eines Python-Skripts in einer Bat-Datei
Arbeiten mit LibreOffice in Python: Importieren
Erstellen Sie eine Binärdatei in Python
Führen Sie einen einfachen Algorithmus in Python aus
So importieren Sie Dateien in Python an eine beliebige Stelle
[Hinweis] Import von Dateien in das übergeordnete Verzeichnis in Python
Spiralbuch in Python! Python mit einem Spiralbuch! (Kapitel 14 ~)
Erstellen einer einfachen Power-Datei mit Python
Führen Sie den Python-Interpreter im Skript aus
[GPS] Erstellen Sie eine kml-Datei mit Python
Führen Sie eine Python-Webanwendung mit Docker aus
Ich habe mit Python eine Einstellungsdatei erstellt
Erstellen Sie Verknüpfungen, um Python-Dateien auf dem Terminal mit VScode auszuführen
Ein Memo, das durch Umbenennen der Dateinamen im Ordner mit Python organisiert wird
Führen Sie Python-Dateien in einem Docker-Container auf einem Remote-Raspbian über PyCharm aus
Lesen Sie die Python # .txt-Datei für Super-Anfänger in Python mit .py
Lesen einer CSV-Datei mit Python 2/3
[Python] Holen Sie sich die Dateien mit Python in den Ordner
Lesen Sie eine Datei mit verstümmelten Linien in Python
So erstellen Sie eine JSON-Datei in Python
Lesen Sie Tabellendaten in einer PDF-Datei mit Python
Python> Mit Laufzeitargumenten ausführen> Import argparse verwenden
Arbeiten Sie in einer virtuellen Umgebung mit Python virtualenv.
Erstellen Sie eine neue Seite im Zusammenfluss mit Python
Führen Sie Python-Dateien mit Django aus HTML aus
Erstellen Sie mit Python eine Datei im Photoshop-Format (.psd)
Erstellen Sie eine MIDI-Datei in Python mit pretty_midi
Lesen Sie mit Python Zeile für Zeile aus der Datei
Ich möchte mit Python in eine Datei schreiben
Dateidialog mit Python-GUI öffnen (tkinter.filedialog)
Dateioperationen in Python
Führen Sie Python mit VBA aus
Dateiverarbeitung in Python
Führen Sie prepDE.py mit python3 aus
Führen Sie Blender mit Python aus
Dateimanipulation mit Python
Importieren Sie tsv mit Python
Führen Sie iperf mit Python aus
Stellen Sie Docker in Windows Home und führen Sie einen einfachen Webserver mit Python aus
So legen Sie Google Text & Tabellen in einem Ordner zusammen in einer TXT-Datei mit Python ab
Analysieren Sie eine JSON-Zeichenfolge, die in eine Datei in Python geschrieben wurde
So konvertieren / wiederherstellen Sie einen String mit [] in Python
Geben Sie das obere Verzeichnis / Unterverzeichnis mit dem relativen Import von Python an
Erstellen Sie einen einfachen Slackbot mit einer interaktiven Schaltfläche in Python
So führen Sie Tests zusammen mit Python unittest aus
Versuchen Sie, Python mit pybind11 in ein C ++ - Programm einzubetten
Erstellen Sie ein Plug-In, um Python Doctest mit Vim (1) auszuführen.
Ich möchte eine Datei mit Python zufällig testen
Ich möchte mit einem Roboter in Python arbeiten.
[Python] Erstellen Sie mit cx_Freeze eine Verteilungsdatei für das Tkinter-Programm
Erstellen Sie mit Quarry einen gefälschten Minecraft-Server in Python
Ich möchte einen Quantencomputer mit Python betreiben
Erstellen Sie eine 2D-CAD-Datei ".dxf" mit Python [ezdxf]
Verwenden Sie tkinter, um den Ausgabecode in Python als "A und vorgeben, B zu sein" zu verschieben
Erstellen Sie mit PyInstaller eine exe-Datei, die in einer Windows-Umgebung ohne Python funktioniert
Ich blieb stecken, als ich versuchte, einen relativen Pfad mit relative_to () in Python anzugeben
Python2 / numpy> Ersetzen Sie nur eine bestimmte Spalte in einer Datei durch Spaltendaten aus einer anderen Datei> numpy.c_