wake-up-neo.com

PyCharm-Fehler: 'Kein Modul' beim Versuch, ein eigenes Modul (Python-Skript) zu importieren

Ich habe ein Modul geschrieben (eine Datei my_mod.py-Datei, die sich im Ordner my_module befindet) . Derzeit arbeite ich in der Datei cool_script.py, die sich im Ordner cur_proj befindet. Ich habe den Ordner in PyCharm mit File-Open geöffnet (und ich gehe davon aus, dass es sich um ein PyCharm-Projekt handelt).

In ProjectView (CMD-7) kann ich mein Projekt cur_proj (in rot) und unter "Externe Bibliotheken" my_module sehen. In cool_script.py kann ich schreiben 

from my_module import my_mod as mm

und PyCharm macht sogar Vorschläge für my_mod. So weit, ist es gut.

Wenn ich jedoch cool_script.py ausführen möchte, sagt mir PyCharm "Kein Modul namens my_module"

Das erscheint mir seltsam, weil

A) Im Terminal (OS 10.10.2), in Python, kann ich das Modul problemlos importieren - es gibt einen entsprechenden Eintrag im PYTHONPATH in .bashrc

B) In PyCharm - Einstellungen - Project cur_proj - Project Interpreter - CogWheel neben dem Python-Interpreter - mehr - Pfade für das ausgewählte Interpreter-Symbol anzeigen, die Pfade von PYTHONPATH werden angezeigt (wie ich meine sollte)

Warum erhalte ich die Fehlermeldung, wenn ich cool_script.py ausführen möchte? -- Was vermisse ich?

Anmerkungen:

Nachtrag 2015 vom 25. Februar

Wenn ich in PyCharm zum Ausführen von Konfigurationen gehe, gibt es für mein aktuelles Projekt zwei Optionen, die mit einem Häkchen markiert sind: "Inhaltsstamm zu PYTHONPATH hinzufügen" und "Quellstamm hinzufügen) zu PYTHONPATH ". Wenn ich beide nicht aktiviert habe, kann ich mein Modul laden.

So funktioniert es jetzt - aber warum

Weitere Fragen tauchten auf:

  • Was sind "Inhaltswurzeln" und was sind "Quellwurzeln"? Und warum bringt das Hinzufügen von etwas zum PYTHONPATH es irgendwie kaputt?
  • sollte ich diese beiden Optionen ständig deaktivieren (also auch in den Standardeinstellungen, nicht nur bei den projektspezifischen Konfigurationen (linker Bereich des Dialogfelds "Konfigurationen ausführen/debuggen")?
97
Claus

Befindet sich Ihr eigenes Modul im selben Pfad, müssen Sie den Pfad als Sources Root markieren. Klicken Sie im Projekt-Explorer mit der rechten Maustaste auf das Verzeichnis, das Sie importieren möchten. Wählen Sie dann Mark Directory As und wählen Sie Sources Root.

Ich hoffe das hilft.  

217
Beatriz Fonseca

PyCharm Community/Professional 2018.2.1

Ich hatte gerade dieses Problem und konnte es auf eine ähnliche Weise lösen, auf die @Beatriz Fonseca und @Julie hingewiesen haben. 

Wenn Sie File -> Settings -> Project: YourProjectName -> Project Structure aufrufen, haben Sie ein Verzeichnislayout des Projekts, in dem Sie gerade arbeiten. Sie müssen Ihre Verzeichnisse durchgehen und sie als Source-Verzeichnis bezeichnen für alle Ihre Quelldateien oder als Resource-Ordner für Dateien, die ausschließlich zum Importieren dienen. 

Sie sollten auch sicherstellen, dass Sie __init__.py-Dateien in Ihren Ressourcenverzeichnissen oder an einem beliebigen Ort, von dem Sie importieren möchten, platzieren. Das funktioniert einwandfrei. 

Ich hoffe, diese Antwort hilft jemandem, und hoffentlich wird JetBrains diesen nervigen Fehler beheben.

11
Oleg Silkin

Ich habe versucht, den Speicherort meiner Dateien zu finden.

z.B. E:\git_projects\My_project\__init__.py is my location.

Ich ging zu Datei -> Einstellungen -> Projekt: Mein_Projekt -> Projektstruktur und fügte das Inhaltsstammverzeichnis zu ca. E:\git_projects\My_project hinzu.

es hat für mich funktioniert.

6
Virendra Patel

my_module ist ein Ordner und kein Modul. Sie können einen Ordner nicht importieren. Versuchen Sie, my_mod.py in denselben Ordner wie cool_script.py zu verschieben, und dann doimport my_mod as mm. Dies liegt daran, dass Python nur im aktuellen Verzeichnis und in sys.path sucht und daher my_mod.py nicht findet, es sei denn, es befindet sich im selben Verzeichnis

Oder Sie können hier nach einer Antwort suchen, in der Sie erfahren, wie Sie aus anderen Verzeichnissen importieren.

Zu Ihren anderen Fragen weiß ich nicht, da ich PyCharm nicht verwende.

4
EpsilonX

Dies kann auftreten, wenn der Python-Interpreter Ihren Code nicht finden kann. Sie müssen Python explizit erwähnen, um Ihren Code an diesem Ort zu finden.

Um dies zu tun:

  • Gehen Sie zu Ihrer Python-Konsole
  • Fügen Sie sys.path.extend(['your module location']) zur Python-Konsole hinzu.

In Ihrem Fall:

  • Gehen Sie zu Ihrer Python-Konsole.
  • Schreiben Sie beim Start den folgenden Code:

    import sys
    sys.path.extend([my module URI location])
    
  • Nachdem Sie diese Anweisung geschrieben haben, können Sie den folgenden Befehl ausführen:

    from mymodule import functions
    
2
Shravan Shetty

Ich habe auch den Fehler mit "Quellwurzeln zu PYTHONPATH hinzufügen" erhalten. Mein Problem war, dass ich zwei Ordner mit demselben Namen hatte, wie project/subproject1/thing/src und project/subproject2/thing/src und beide als Quellstammverzeichnis markiert waren. Wenn ich einen der "thing"-Ordner in "thing1" (einen beliebigen eindeutigen Namen) umbenannt habe, hat es funktioniert.

Wenn PyCharm automatisch ausgewählte Quellstammverzeichnisse hinzufügt, verwendet es möglicherweise nicht den vollständigen Pfad und mischt daher Ordner mit demselben Namen.

2

SO, wenn du gehst 

-> Einstellungen -> Projekt: Mein_Projekt -> Projektstruktur,

Nur das Verzeichnis, in dem der Quellcode verfügbar ist, und als "Quellen" kennzeichnen (Sie können ihn im selben Fenster sehen). Das Verzeichnis mit dem Quellcode sollte blau werden. Jetzt können Sie in Modulen importieren, die sich in demselben Verzeichnis befinden.

1
JRD

Der verwirrende Schlüsselschritt ist das erneute Erstellen der Laufkonfiguration für die Quelldatei, die Sie ausführen möchten, damit die IDE die neuen Pfade aufnimmt. 

Die Methode, die für mich tatsächlich funktioniert hat, war, zu Konfigurationen ausführen/bearbeiten zu gehen ..., die Konfiguration für die Datei auszuwählen, die Sie auf der linken Seite ausführen möchten, deaktivieren Sie das Kontrollkästchen "Quellstammverzeichnis zu PYTHONPATH hinzufügen", Speichern, und dann zurück und das Kästchen ankreuzen und speichern. DANN würde es funktionieren.

1
tomchappell

Die Lösung für dieses Problem, ohne das Verzeichnis als Quellstammverzeichnis markieren zu müssen, ist die Bearbeitung von Ausführungskonfigurationen. Wählen Sie in Ausführung die Option "Eingabe umleiten" und wählen Sie das Skript, das Sie ausführen möchten. Dies funktioniert, weil es dann so behandelt wird, als ob das Skript interaktiv in diesem Verzeichnis ausgeführt würde. Python markiert den Modulnamen jedoch weiterhin mit dem Fehler "Kein Modul mit dem Namen x":

 Redirect input from:

Wenn der Interpreter die Importanweisung ausführt, sucht er nach x.py in einer Liste von Verzeichnissen, die aus den folgenden Quellen zusammengestellt sind:

  1. Das Verzeichnis, von dem aus das Eingabeskript ausgeführt wurde, oder das aktuelle Verzeichnis, wenn der Interpreter interaktiv ausgeführt wird
  2. Die Liste der in der Umgebungsvariablen PYTHONPATH enthaltenen Verzeichnisse, sofern festgelegt.
  3. Eine installationsabhängige Liste von Verzeichnissen, die zum Zeitpunkt der Installation von Python konfiguriert wurden, in meinem Fall usr/lib/python3.6 unter Ubuntu.
0
PyFox

Die Antwort, die für mich funktioniert hat, war in der Tat, was OP in seinem 2015-Update erwähnt: Deaktivieren Sie diese beiden Kästchen in Ihrer Python-Konfiguration:

  • "Hinzufügen von Inhaltswurzeln zu PYTHONPATH"
  • "Quellwurzeln zu PYTHONPATH hinzufügen"

Ich hatte bereits die run config gesetzt, um das richtige venv zu verwenden, sodass PyCharm zusätzliche Arbeit zum Hinzufügen von Dingen zum Pfad machte. Stattdessen verursachte es Fehler.

0
Hober

Inhaltsstammverzeichnisse sind Ordner, die Ihren Projektcode enthalten. Quellstammverzeichnisse werden ebenfalls als gleich definiert. Der einzige Unterschied, den ich zu verstehen bekam, war, dass der Code in den Quellwurzeln vor dem Code im Inhaltsstamm erstellt wird. 

Wenn Sie das Kontrollkästchen deaktivieren, wirkt sich dies nicht auf die Laufzeit aus, bis Sie in Ihrem Paket keine separaten Module erstellen, die manuell mit Django verbunden sind. Das heißt, wenn eine Ihrer Dateien nicht den Eintrag "from Django import ..." enthält oder eine Funktion nicht über Django aufgerufen wird, führt das Deaktivieren dieser beiden Optionen zu einer Fehlfunktion.

Update - Das Problem tritt nur bei der Verwendung von Virtual Environmanet und nur bei der Steuerung des Projekts über das bereitgestellte Terminal auf. Das Terminal funktioniert weiterhin über den Standardsystempfad pyhtonpath und nicht über die virtuelle Umgebung. während das Django-Python-Kontrollfeld gut funktioniert.

0
RA123

ls -s. SomeProject

Wenn Sie someDirectory/someProjectDir und zwei Dateien haben, versuchen file1.py und file2.py und file1.py mit dieser Zeile zu importieren

aus einer SomeProjectDir-Importdatei2

Es funktioniert nicht, auch wenn Sie someProjectDir als Quellverzeichnis festgelegt haben und selbst wenn es in den Einstellungen, Projekt, Projektstrukturmenü als Inhaltsstammverzeichnis angezeigt wird. Die einzige Funktionsweise besteht darin, das Projekt wie oben gezeigt zu verknüpfen (Unix-Befehl, funktioniert in Mac, nicht sicher über die Verwendung oder Syntax für Windows) ... Es scheint ein Mechanismus zu sein, bei dem Pycharm dies automatisch entweder beim Auschecken der Versionskontrolle durchführt oder als Kontextstamm hinzufügen, da der Softlink von Pycharm in einem abhängigen Projekt erstellt wurde. Daher muss nur das gleiche kopiert werden, obwohl die seltsame Replikation des Verzeichnisses ärgerlich ist und die Notwendigkeit verblüffend ist. Auch in der Abhängigkeit, in der Auto automatisch erstellt wurde, wird es nicht als neues Verzeichnis unter Versionskontrolle angezeigt. Vielleicht wird der Vergleich von .idea-Dateien mehr verraten. 

0
user10895922

Ich habe diesen Fehler erhalten, wenn das Arbeitsverzeichnis nicht richtig eingestellt war. Es war sehr seltsam, da es sich um eine Neuinstallation handelte, und ich kann mir keinen Grund vorstellen, warum PyCharm anstelle des Stammverzeichnisses ein zufälliges Verzeichnis als Arbeitsverzeichnis für das Projekt verwenden würde

0
Ruslan

Pycharm 2017.1.1

  1. Klicken Sie auf View->ToolBar & View->Tool Buttons
  2. Im linken Bereich wäre Project sichtbar, klicken Sie mit der rechten Maustaste darauf und Drücken Sie Autoscroll to source Und führen Sie dann Ihren Code aus.

Das hat bei mir funktioniert.

0
AB Abhi