webentwicklung-frage-antwort-db.com.de

PyCharm zeigt einen nicht aufgelösten Referenzfehler für gültigen Code

Ich benutze PyCharm, um an einem Projekt zu arbeiten. Das Projekt wird mit einem Interpreter geöffnet und konfiguriert und kann erfolgreich ausgeführt werden. Die Ferninterpreterpfade werden ordnungsgemäß zugeordnet. Dies scheint die richtige Konfiguration zu sein, aber PyCharm hebt meinen gültigen Code mit "nicht aufgelösten Referenz" -Fehlern hervor, selbst für integrierte Python-Funktionen. Warum werden diese nicht erkannt, obwohl der Code ausgeführt wird? Gibt es eine Möglichkeit, PyCharm dazu zu bringen, diese richtig zu erkennen?


Diese spezielle Instanz des Problems betrifft einen Remote-Interpreter, aber das Problem tritt auch bei lokalen Interpreten auf.

233
James McCalden

Datei | Caches ungültig machen ... und PyCharm neu starten hilft.

360
Dmitry Trofimov

Die Antwort von Dmitry hat für mich nicht funktioniert. 

Ich bekam meine Arbeit, indem ich zu Projektinterpreter ging, die Registerkarte "Pfade" auswählte und in diesem Untermenü auf die Aktualisierungsschaltfläche klicke. Es füllte sich automatisch mit etwas, das "Python-Skelette" genannt wurde.

edit : Screenshot mit PyCharm 3.4.1 (ist ziemlich gut versteckt)

enter image description here

117
kelorek

Dafür gibt es viele Lösungen, einige bequemer als andere, und sie funktionieren nicht immer.

Hier können Sie alles versuchen, von "schnell" zu "ärgerlich":

  • Machen Sie File -> Invalidate Caches / Restart und starten Sie PyCharm ..__ neu.
    • Sie können dies auch nach einer der folgenden Methoden tun, um sicherzugehen.
  • Prüfen Sie zunächst, welchen Interpreter Sie verwenden: Run -> Edit Configurations -> Configuration -> Python Interpreter.
  • Aktualisieren Sie die Pfade Ihres Interpreters:
    • File -> Settings
    • Project: [name] -> Project Interpreter -> 'Projektinterpreter': Zahnradsymbol -> More...
    • Klicken Sie auf die Schaltfläche "Pfade anzeigen" (unterste).
    • Klicken Sie auf die Schaltfläche "Aktualisieren" (unterste Schaltfläche).
  • Entfernen Sie den Interpreter und fügen Sie ihn erneut hinzu:
    • File -> Settings
    • Project: [name] -> Project Interpreter -> 'Projektinterpreter': Zahnradsymbol -> More...
    • Klicken Sie auf die Schaltfläche "Entfernen"
    • Klicken Sie auf die Schaltfläche "Hinzufügen" und fügen Sie Ihren Interpeter erneut hinzu
  • Löschen Sie Ihre Projekteinstellungen
    • Löschen Sie den .idea-Ordner Ihres Projekts
    • Schließen Sie PyCharm und öffnen Sie es erneut
    • Öffnen Sie Ihr Projekt von Grund auf
  • Löschen Sie Ihre PyCharm-Benutzereinstellungen (aber sichern Sie sie zuerst) .
    • ~/.PyCharm50 auf dem Mac
    • %homepath%/.PyCharm50 unter Windows
  • Wechseln Sie zu einem anderen Interpreter und dann wieder zum gewünschten Dolmetscher.
  • Erstellen Sie eine neue virtuelle Umgebung und wechseln Sie zum Interpreter dieser Umgebungen.
  • Wechseln Sie zu einem anderen Dolmetscher, wechseln Sie nicht zurück.
50
florisla

Ich finde, ich entferne den Remote-Interpreter und füge ihn erneut hinzu, um dieses Problem zu beheben, wenn das Invalidieren von Caches oder das Aktualisieren von Pfaden nicht funktioniert.

Ich verwende vagrant und ab und zu, wenn ich meinem Multi-vm-Setup ein neues VM hinzufüge, ändert sich der weitergeleitete Port. Dies scheint PyCharm zu verwirren, wenn versucht wird, den falschen Port für SSH zu verwenden. Das Ändern des Ports scheint den gebrochenen Verweisen nicht zu helfen.

11
Thomas Farvour

In meinem Fall war es die Verzeichnisstruktur . Mein Projekt sieht folgendermaßen aus:

+---dir_A
    +---dir_B
        +app
        |
        \-run.py

Also Rechtsklick auf dir_b> "Verzeichnis als"> "Projektwurzel markieren"

11
Shoham

Getestet mit PyCharm 4.0.6 (OSX 10.10.3) Gehen Sie folgendermaßen vor:

  1. Klicken Sie auf PyCharm-Menü.
  2. Wählen Sie Project Interpreter aus.
  3. Wählen Sie das Zahnradsymbol.
  4. Schaltfläche Mehr auswählen.
  5. Wählen Sie den Projektinterpreter aus, in dem Sie sich befinden.
  6. Schaltfläche Verzeichnisstruktur auswählen.
  7. Wählen Sie Liste der Pfade neu laden.

Problem gelöst!

10
siripan

Wenn keine der anderen Lösungen für Sie geeignet ist, versuchen Sie, Ihren ~/.PyCharm40-Ordner (zu sichern) und zu löschen, und öffnen Sie dann PyCharm erneut. Dies wird auch alle Ihre Präferenzen töten.

Auf einem Mac möchten Sie ~/Library/Caches/Pycharm40 und ~/Library/Preferences/PyCharm40 löschen.

Und unter Windows: C:\Users\$ USER.PyCharm40.

10
Imran

Es tut mir leid, diese Frage zu stoßen, allerdings muss ich ein wichtiges Update machen.

Möglicherweise möchten Sie Ihren Projektinterpreter auf Python 2.7.6 zurücksetzen, wenn Sie eine andere Version als diese verwenden. Dies funktionierte bei meiner Ubuntu-Installation von PyCharm 4.04 professional, nachdem keine der anderen Empfehlungen mein Problem gelöst hatte.

5
Fairlight Evony

Sie könnten versuchen, Pycharm zu schließen, den Ordner .idea aus Ihrem Projekt zu löschen, Pycharm erneut zu starten und das Projekt neu zu erstellen. Dies funktionierte für mich, während der Cache für ungültig erklärt wurde. 

3
Jason McVetta

Es könnte sich auch um eine Python-Version handeln. Ich musste das Richtige auswählen, damit es funktioniert .  enter image description here

2
Shehaaz

sehr leicht

sie müssen lediglich Ihr Stammverzeichnis als "SOURCE ROOT" (rot) und Ihre Anwendungen als "EXCLUDED ROOT" (blau) markieren.

dann verschwindet die ungelöste Referenz.

  • enter image description here Wenn Sie PyChram Pro verwenden, erledigen Sie dies automatisch für Sie.
2
mujad

Ich bekam diese Arbeit endlich, nachdem keine der vorgeschlagenen Lösungen für mich funktionierte. Ich spielte mit einem Django-Rest-Framework-Projekt und verwendete eine Virtualenv, die ich damit eingerichtet hatte. Ich konnte Pycharm reparieren lassen, indem ich den Root-Ordner als Source-Root markierte, aber dann würde Djangos Server Auflösungsausnahmen auslösen. Einer würde also arbeiten, wenn der andere es nicht tun würde und umgekehrt. 

Letztendlich musste ich nur den Unterordner als Quellenstamm in pycharm markieren. So war meine Struktur so

-playground
     -env
     -playground

Der zweite Ordner für den Spielplatz ist der Ordner, den ich als Quellenstamm markieren musste, damit alles wie erwartet funktioniert. Das stellte für mein Szenario keine Probleme dar und war daher eine praktikable Lösung. 

Ich dachte nur, ich würde es teilen, falls jemand anderes es benutzen kann.

2
user2233949

Keine der oben genannten Lösungen hat für mich funktioniert!
Wenn Sie eine virtuelle Umgebung für Ihr Projekt verwenden, stellen Sie sicher, dass Sie die python.exe-Datei, die sich in Ihrem virtuellen Umgebungsverzeichnis befindet, als Interpreter für das Projekt (Alt + Ctrl + Shift + S) .__ anwenden. Dies hat das Problem für mich gelöst.

1
Ali Sherafat

Ich habe alle anderen Projekte geschlossen und habe mein erforderliches Projekt isoliert in Pycharm durchgeführt. Ich habe eine eigene Virtualenv aus pycharm erstellt und alle erforderlichen Module mit pip hinzugefügt. Ich habe diese virtuelle Umgebung zum Projektinterpreter hinzugefügt. Das hat mein Problem gelöst. 

1
Waqar Detho

In meinem Fall zeigt sich der Inspektionsfehler aufgrund eines sehr speziellen Falls von Python-Code. Eine Min-Funktion, die zwei numpy-Funktionen und zwei Listenzugriffe enthält, führt dazu, dass meine Codeinspektion diese Art von Fehlern ausgibt. 

Das Entfernen der Zeile 'd = 0' im folgenden Beispiel führt erwartungsgemäß zu einem nicht aufgelösten Referenzfehler. Beim Lesen dieser Informationen wird der Fehler für den Code-Inspector jedoch nicht behoben. Ich kann den Code danach ohne Probleme ausführen.

import numpy as np
def strange(S, T, U, V):
    d = 0
    print min(np.abs(S[d]), np.abs(T[d]), U[d], V[d])

Das Löschen von Caches und das erneute Laden einer Liste von Pfaden funktioniert nicht. Nur das Ändern des Codes mit einem der folgenden Beispiel-Patches funktioniert:

  • Eine andere Reihenfolge der 'min'-Parameter: schematisch S U T V, jedoch nicht S T U V oder T S U V
  • Verwenden einer Methode anstelle der Funktion: S [d] .abs () statt np.abs (S [d])
  • Verwendung der eingebauten Funktion abs ()
  • Hinzufügen einer Zahl zu einem Parameter der Wahl: U [d] + 0.
1
Wannes Goethals

Keine der Antworten löste mein Problem.

Was es für mich tat, war, die Umgebung zu wechseln und zur gleichen Umgebung zurückzukehren. File->Settings->Project interpreter

Ich benutze Conda-Umgebungen.

1
Kristjan Kica

Was für ein Albtraum, mein Zusammenschluss verschiedener StackOVerflow-Antworten:

  1. Wechseln Sie zum lokalen Interpreter /usr/bin/pythonX.X und wenden Sie sich an
  2. Zeigen Sie die Pfade wie oben an
  3. Finde den Pfad der Skelette. Meines war (/home/tim/Desktop/pycharm-community-2016.2.3/helpers/python-skeletons)
  4. Wechseln Sie wieder zum Virt-Interpreter und fügen Sie den Pfad der Skelette manuell hinzu, wenn er nicht automatisch angezeigt wird.
1
Tim

Wenn Sie vagrant verwenden, kann der Fehler durch einen falschen Python-Interpreter verursacht werden ..__ In unserer vagrant verwenden wir pyenv, daher musste ich den Python Interpreter path-Pfad von /usr/bin/python in /home/vagrant/.pyenv/versions/vagrant/bin/pythonändern. enter image description here

0
Daniil Mashkin

Wenn Sie nur einige "nicht aufgelöste Referenzfehler" ignorieren möchten, können Sie PyCharm dies auch explizit mitteilen, indem Sie dies vor Ihrer Klasse/Methode/Funktion platzieren:

# noinspection PyUnresolvedReferences
0
flix