___ qstnhdr ___ ModuleNotFoundError: Kein Modul namens x
___ qstntxt ___
Dies ist das erste Mal, dass ich mich wirklich hingesetzt habe und Python 3 ausprobiert habe und scheinbar kläglich versagt habe. Ich habe die folgenden zwei Dateien:
- test.py
- config.py
config.py enthält einige Funktionen und einige Variablen. Ich habe es auf Folgendes reduziert:
Ich erhalte jedoch den folgenden Fehler:
%Vor%
Ich bin mir bewusst, dass die py3 Konvention absolute Importe verwenden soll:
%Vor%
Dies führt jedoch zu folgendem Fehler:
%Vor%
Ich bin also ratlos, was ich hier tun soll ... Jede Hilfe wird sehr geschätzt. :)
___ answer45556023 ___
Ich habe es herausgefunden. Sehr frustrierend, vor allem von python2 kommend.
Sie müssen dem Modul ein __main__
hinzufügen, unabhängig davon, ob es relativ oder absolut ist.
Ich habe den Verzeichnisaufbau wie folgt erstellt.
%Vor%
modx.py
%Vor%
mody.py
%Vor%
main.py
%Vor%
wenn ich main ausführe, passiert das
%Vor%
Ich habe 2to3 ausgeführt, und die Kernausgabe war das
%Vor%
Ich musste die Import-Anweisung von mody.py modifizieren, um sie zu reparieren
%Vor%
Dann habe ich main.py erneut ausgeführt und die erwartete Ausgabe erhalten
%Vor%
Schließlich, nur um es aufzuräumen und es zwischen 2 und 3 tragbar zu machen.
%Vor%
___ answer43938991 ___
Wie in den Kommentaren zum ursprünglichen Post gesagt wurde, schien dies ein Problem mit dem Python-Interpreter zu sein, den ich aus irgendeinem Grund benutzte, und nicht mit den Python-Skripten. Ich wechselte vom WinPython Bundle zum offiziellen Python 3.6 von python.org und es funktionierte gut. Danke für die Hilfe alle:)
___ tag123python ___ Python ist eine dynamische und stark typisierte Programmiersprache, die die Usability betont. Zwei ähnliche, aber größtenteils inkompatible Versionen von Python sind weit verbreitet (2 und 3). Wenn Sie eine versionsspezifische Python-Frage haben, sollten Sie die Tags [python-2.7] oder [python-3.x] zusätzlich zum Tag [python] verwenden. Wenn Sie eine Python-Variante wie jython, pypy, iron-python usw. verwenden, kennzeichnen Sie diese bitte entsprechend.
___ answer43925828 ___
Dieses Beispiel funktioniert mit Python 3.6.
Ich empfehle, zu sys.path
in PyCharm zu gehen, irgendwelche Einträge dort zu löschen und zu versuchen, den Code erneut durch PyCharm auszuführen.
Wenn das nicht funktioniert, überprüfen Sie Ihren Projekt-Interpreter (Einstellungen - & gt; Projekt-Interpreter) und führen Sie die Standardeinstellungen für die Konfiguration aus (Ausführen - & gt; Konfigurationen bearbeiten ...).
___ tag123python36 ___ Version der Programmiersprache Python, die im Dezember 2016 veröffentlicht wurde. Für Python 3.6-spezifische Probleme. Verwenden Sie möglichst generische [python] - und [python-3.x] -Tags.
___ answer48575891 ___
Das Einstellen von PYTHONPATH kann auch bei diesem Problem helfen.
Hier ist, wie es gemacht werden kann. Bitte beachten Sie die grün hinterlegte Zeile
___ answer43800218 ___
Versuch dein Beispiel
%Vor%
hat folgenden Systemfehler:
/usr/bin/python3.4 test.py
Traceback (letzter Aufruf zuletzt):
Datei "test.py", Zeile 1, in
von . import config
SystemError: Übergeordnetes Modul '' nicht geladen, kann keinen relativen Import durchführen
Das wird für mich funktionieren:
%Vor%
Getestet mit Python: 3.4.2 - PyCharm 2016.3.2
Außerdem bietet PyCharm Ihnen Diesen Namen importieren .
Sie müssen auf main.py
klicken und ein Hilfesymbol erscheint.
___ antwort43859946 ___
TL; DR: Sie können keine relativen Importe von der Datei ausführen, die Sie ausführen , da __main__
module nicht Teil eines Pakets ist.
Absolute Importe - Importieren Sie etwas verfügbares in import config
Relative Importe - importieren Sie etwas relativ zum aktuellen Modul, muss ein Teil eines Pakets sein
Wenn Sie beide Varianten auf genau dieselbe Weise ausführen, sollte einer von ihnen funktionieren. Wie auch immer, hier ist ein Beispiel, das Ihnen helfen soll, zu verstehen, was vor sich geht, fügen wir eine weitere ryan
-Datei mit der gesamten Verzeichnisstruktur wie folgt hinzu:
%Vor%
Und lasst uns test.py aktualisieren, um zu sehen, was passiert:
%Vor%
Lassen Sie uns zuerst test.py ausführen:
%Vor%
Hier ist "test" das Modul import config
und weiß nichts über die Zugehörigkeit zu einem Paket. % Co_de% sollte jedoch funktionieren, da der Ordner __init__.py
zu sys.path hinzugefügt wird.
Lassen Sie uns stattdessen main.py ausführen:
%Vor%
Und hier ist Test innerhalb des "Ryan" -Pakets und kann relative Importe durchführen. %code% schlägt fehl, da implizite relative Importe in Python 3 nicht erlaubt sind.
Ich hoffe, das hat geholfen.
P.S .: Wenn Sie bei Python 3 bleiben, brauchen Sie nicht mehr in %code% Dateien.
___