Ungelöstes Referenzproblem in PyCharm

373

Ich habe eine Verzeichnisstruktur

├── simulate.py
├── src
   ├── networkAlgorithm.py
   ├── ...

Und ich kann mit auf das Netzwerkmodul zugreifen sys.path.insert().

import sys
import os.path
sys.path.insert(0, "./src")
from networkAlgorithm import *

Pycharm beschwert sich jedoch, dass es nicht auf das Modul zugreifen kann. Wie kann ich Pycham beibringen, um die Referenz aufzulösen?

Geben Sie hier die Bildbeschreibung ein

prosseek
quelle
4
Hat der src-Ordner eine __init__.pyDatei?
Papageientaucher GDI
@ Papageientaucher GDI: Nein, das tut es nicht.
Prosseek
5
@PuffinGDI Benötigen src-Ordner diese init .py-Datei?
Jack Chi
Ja, damit Python Pakete identifiziert: stackoverflow.com/questions/42094723/…
rnoodle
Ich habe den Klassennamen umbenannt und arbeite weiter daran. Als ich auf "Ausführen" drückte, gab es diesen Fehler, ich vergaß das Umbenennen völlig und versuchte beim Importieren nach Pycharm-Vorschlägen zu suchen. Verdammt, Vorschläge unterscheiden zwischen Groß- und Kleinschreibung! - Neu bei Python !!
Vignesh Paramasivam

Antworten:

817

Das manuelle Hinzufügen, wie Sie es getan haben, ist in der Tat eine Möglichkeit, dies zu tun. Es gibt jedoch eine einfachere Methode, indem Sie pycharm einfach mitteilen, dass Sie den srcOrdner als Quellstamm hinzufügen möchten , und dann den Quellstamm zu Ihrem Python hinzufügen Pfad.

Auf diese Weise müssen Sie die Einstellungen Ihres Dolmetschers nicht fest codieren:

  • Als Quellinhaltsstamm srchinzufügen:

                            Geben Sie hier die Bildbeschreibung ein

  • Stellen Sie dann sicher, dass Sie Quellen hinzufügen zu PYTHONPATH:

Geben Sie hier die Bildbeschreibung ein

  • Jetzt werden Importe aufgelöst:

                      Geben Sie hier die Bildbeschreibung ein

Auf diese Weise können Sie als Quellstamm alles hinzufügen, was Sie möchten, und die Dinge funktionieren einfach. Wenn Sie es jedoch als Quellstamm deaktiviert haben, wird folgende Fehlermeldung angezeigt:

                                  Geben Sie hier die Bildbeschreibung ein

Vergessen Sie nach all dem nicht, neu zu starten. Wählen Sie im PyCharm-Menü: Datei -> Caches ungültig machen / neu starten

Spiele Brainiac
quelle
17
Dies funktioniert auch, wenn Sie das Python-Plugin mit IntelliJ verwenden.
Rob Mayoff
13
Diese Lösung funktioniert. Das Problem dabei ist, dass eine andere Programmiererin, wenn sie den Code von svn abruft, dieselben Einstellungen erneut vornehmen muss, um die Fehleraufforderung "ungelöste Referenz" zu entfernen.
Ben Lin
2
@GamesBrainiac, die Lösung besteht darin, dass die IDE "sys.path.insert (0," ./src ")" analysieren kann, dies in PYTHONPATH für diese bestimmte Datei hinzufügen und dann die richtige Syntaxanalyse durchführen kann.
Ben Lin
2
Sie müssen auch sicherstellen, dass Ihr Inhaltsstammpfad korrekt ist. In pycharm 5 finden Sie dies unter Einstellungen -> Projekt -> Projektstruktur.
lps
1
Seltsamerweise werden Unterverzeichnisse nicht berücksichtigt. Wenn srcwir zum Beispiel einen viewsOrdner haben myview.py, in dem ich mich from src.views.myview import <my_function>
befinde
49
  1. Suchen Sie nach einer __init__.pyDatei im srcOrdner
  2. Fügen Sie den srcOrdner als Quellstamm hinzu
  3. Stellen Sie dann sicher, dass Sie Quellen hinzufügen PYTHONPATH(siehe oben).
  4. Wählen Sie im PyCharm-Menü: Datei -> Caches ungültig machen / neu starten
Ukr
quelle
11
Dieser allerletzte Schritt war das einzige, was in meiner Lösung fehlte. Die akzeptierte Antwort könnte dies hinzufügen.
Aimbire
Ohne den letzten hier genannten Schritt funktioniert die akzeptierte Antwort nicht. Akzeptierte Antwort sollte auch diesen Schritt hinzufügen /
santhosh kumar
23

Wenn sich jemand dies noch ansieht, funktioniert die akzeptierte Antwort immer noch für PyCharm 2016.3, als ich es ausprobiert habe. Die Benutzeroberfläche hat sich möglicherweise geändert, aber die Optionen sind immer noch dieselben.

dh. Klicken Sie mit der rechten Maustaste auf Ihren Stammordner -> 'Verzeichnis als markieren' -> Quellstamm

AeroHil
quelle
1
So viele komplexe Antworten in dieser Diskussion. Die hier vorgestellte Lösung hat bei mir so einfach funktioniert.
16

Nachdem Sie alle Problemumgehungen getestet haben, empfehle ich Ihnen, sie sich anzusehen Settings -> Project -> project dependenciesund neu anzuordnen.

Pycharmpräferenz

mehdi
quelle
Das funktioniert perfekt für mich. Ich habe dort installiert pygameund nicht mehr ungelöstes Referenzproblem!
Michal Przybylowicz
5

Im Allgemeinen ist dies ein fehlendes Paketproblem. Platzieren Sie das Caret einfach an der ungelösten Referenz und drücken Sie Alt+Enter, um die Optionen anzuzeigen. Dann sollten Sie wissen, wie Sie es lösen können.

Ch_y
quelle
4

Nachdem ich der akzeptierten Antwort gefolgt bin, hat das folgende Problem für mich gelöst:

FileSettingsProject <your directory/project>Project Dependencies

Wählen Sie das Verzeichnis / Projekt aus, in dem sich Ihre Datei mit ungelösten Importen befindet, und aktivieren Sie das Kontrollkästchen, um Pycharm mitzuteilen, dass dieses Projekt von Ihrem anderen Projekt abhängt.

Meine Ordnerhierarchie unterscheidet sich geringfügig von der in der Frage. Meins ist so

├── MyDirectory  
     └── simulate.py  
├── src  
     ├── networkAlgorithm.py  
     ├── ...

Pycharm zu sagen, dass src davon abhängt, hat MyDirectorydas Problem für mich gelöst!

Benjamin
quelle
4

Obwohl alle Antworten wirklich hilfreich sind, gibt es eine winzige Information, die explizit erklärt werden sollte:

  • Im Wesentlichen arbeitet ein Projekt mit mehreren hierarchischen Verzeichnissen als Paket mit einigen Attributen.
  • Um benutzerdefinierte lokal erstellte Klassen zu importieren, müssen wir zu dem Verzeichnis navigieren, das die .pyDatei enthält , und dort eine __init__.py(leere) Datei erstellen .

Dies hilft, weil diese Datei erforderlich ist, damit Python das Verzeichnis als Pakete enthaltend behandelt. Prost!

Muhammad Waqas Kayani
quelle
3

Installation über PyCharm (funktioniert mit Community Edition). Öffnen Sie und Settings > Project > Project Interpreterklicken Sie auf das grüne + Symbol im folgenden Screenshot. Geben Sie im zweiten Dialogfeld den Paketnamen ein und klicken Sie auf die Schaltfläche "Paket installieren".

Geben Sie hier die Bildbeschreibung ein

danday74
quelle
1

Bitte überprüfen Sie, ob Sie den richtigen Dolmetscher verwenden, den Sie verwenden sollen. Ich habe den Fehler "ungelöste Referenz 'django'" erhalten, um dieses Problem zu beheben. Ich habe den Projektinterpreter (Python 3 in Python 2.7 geändert) aus den Projekteinstellungen geändert: Wählen Sie Projekt, gehen Sie zu Datei -> Einstellungen -> Projekt: -> Projektinterpreter -> Durchsuchen und Wählen Sie die richtige Version oder den richtigen Interpreter aus (z. B. /usr/bin/python2.7).

kishs1991
quelle
1

In meinem Fall bestand das Problem darin, dass ich Virtual environmentkeinen Zugriff auf globale Site-Pakete hatte. Daher waren dem Interpreter die neu installierten Pakete nicht bekannt.

Um das Problem zu beheben, bearbeiten oder erstellen Sie einfach Ihren virtuellen Interpreter und aktivieren Sie die Inherit global site-packagesOption.

Geben Sie hier die Bildbeschreibung ein

Dan
quelle
Hat dies nicht unerwünschte Konsequenzen und besiegt einen Grund, eine virtuelle Umgebung zu verwenden? Das heißt, wenn Sie diese Umgebung irgendwohin bringen und diese globalen Site-Pakete installiert sind, sind Sie in Schwierigkeiten. Das ist was ich dachte.
theStud54
1

Das hat bei mir funktioniert: Top Menu -> File -> Invalidate Caches/Restart

Gershon Herczeg
quelle
0

Fertig in PyCharm 2019.3.1 Klicken Sie mit der rechten Maustaste auf Ihren src-Ordner -> "Verzeichnis als" markieren -> Klicken Sie auf "Ausgeschlossen" und Ihr src-Ordner sollte blau sein.

Burhan U Din
quelle
-1

Pycharm verwendet venv. In der venv-Konsole sollten Sie die Pakete explizit installieren oder hineingehen settings -> project interpreter -> add interpreter -> inherit global site-packages.

Yunus
quelle
-1

In neueren Versionen von pycharm können Sie dies einfach tun, indem Sie mit der rechten Maustaste auf das Verzeichnis oder Python-Paket klicken, aus dem Sie eine Datei importieren möchten, und dann auf "Verzeichnis als" markieren -> "Quellenstamm" klicken.

Shravan Kumar
quelle
-1

Der einfachste Weg, dies zu beheben, besteht darin, in Ihrer pyCharm-Software Folgendes zu tun:

Klicken Sie auf: Datei> Einstellungen> (Projekt: Ihr Projektname)> Projektinterpreter>

Klicken Sie dann auf das Symbol "+" auf der rechten Seite, um nach dem gewünschten Paket zu suchen und es zu installieren.

Viel Spaß beim Codieren !!!

zaid.mohammed
quelle
1
Willkommen bei Stack Overflow und vielen Dank für Ihre Antwort. Obwohl dies korrekt sein mag, vermeiden Sie es in Zukunft, Bilder oder Links zu anderen Websites ohne Kontext oder weitere Details zu veröffentlichen. Der Link funktioniert möglicherweise irgendwann nicht mehr, sodass diese Antwort für andere Benutzer weniger nützlich ist.
CyberJacob
@CyberJacob Vielen Dank und vielen Dank für Ihren Rat. Ich habe die Antwort bearbeitet, indem ich das Bild entfernt und stattdessen Text hinzugefügt habe.
zaid.mohammed