Pylint-Fehler "ungelöster Import" in Visual Studio Code

125

Ich verwende das folgende Setup

  • macOS v10.14 (Mojave)
  • Python 3.7.1
  • Visual Studio Code 1.30
  • Pylint 2.2.2
  • Django 2.1.4

Ich möchte Flusen verwenden, um mein Leben in Visual Studio Code ein bisschen einfacher zu machen. Für jeden Import habe ich jedoch den Status "ungelöster Import". Auch bei Standard-Django-Importen (dh von django.db-Importmodellen).

Ich nehme an, es liegt daran, dass die Python-Dateien der virtuellen Umgebung nicht angezeigt werden.

Alles funktioniert gut, aber es wird langsam nervig.

Die Interpreter-Auswahlmöglichkeiten, die ich habe, sind alle Systemversionen von Python. Meine virtuelle Umgebung Python scheint überhaupt nicht zu sehen (sie befindet sich nicht im selben Verzeichnis wie mein Arbeitsbereich, daher ist dieser Teil sinnvoll).

Wenn ich python.PythonPath in der Datei settings.json einrichte , wird es einfach ignoriert und mein Pfad für die virtuelle Umgebung wird nicht als Option aufgeführt. Ich habe auch versucht, es in meinen globalen Python-Einstellungen einzurichten, aber es wird auch nicht angezeigt.

Gibt es eine schnelle Lösung, um es zum Laufen zu bringen?

jAC
quelle
2
pip install pylint-django, dann fügen Sie in vs Code-Einstellungen "python.linting.pylintArgs": [ "--load-plugins=pylint_django", ],
Folgendes
@ VaibhavVishal leider erhalte ich immer noch die gleichen Ergebnisse (fügte es meiner settings.json-Datei hinzu)
jAC
2
Es handelt sich tatsächlich um ein VScode-Problem, bei dem das Importpaket sehr spät erkannt wird. Nach dem Neustart wird es automatisch behoben.
Anupam Haldkar

Antworten:

103

In Ihren Arbeitsbereichseinstellungen können Sie Ihren Python-Pfad folgendermaßen festlegen:

{
    "python.pythonPath": "/path/to/your/venv/bin/python",
}
ruddra
quelle
28
Diese Art von Arbeiten. Für die Python-spezifischen Importe werden diese jetzt aufgelöst, aber nicht meine eigenen Modelle (dh "from users.models import User" sagt immer noch, dass es nicht aufgelöst werden kann). Gedanken dazu?
JAC
7
Nicht sicher. Bitte versuchen Sie, das Fenster des vs-Codes (von der Shell code <project_directory> -r) neu zu laden , oder starten Sie einfach den vscode neu.
Ruddra
5
Ich bin nicht sicher, manchmal kann es vorkommen, dass das Arbeitsbereichsverzeichnis nicht richtig eingestellt ist. Bitte stellen Sie sicher, dass manage.pyin der Wurzel von ist workspace. Stellen
ruddra
3
du Genie! Dies lag daran, dass mein Arbeitsbereich nicht auf der Stammebene des Projekts begann. Sobald ich eingestellt hatte, dass es anfing zu arbeiten. Vielen Dank!
JAC
1
Vielen Dank! Hat mir geholfen, ein uraltes Problem zu überwinden!
189

Die akzeptierte Antwort behebt den Fehler beim Importieren eigener Module nicht.

Verwenden Sie die folgenden Einstellungen in Ihren Arbeitsbereichseinstellungen .vscode/settings.json:

"python.autoComplete.extraPaths": ["./path-to-your-code"],

Referenz: Fehlerbehebung, ungelöste Importwarnungen

Shinebayar G.
quelle
4
Ich habe einen gemischten Arbeitsbereich, der gesamte Python-Code befindet sich in einem Unterordner. Das Hinzufügen eines .vscode im Unterordner funktioniert nicht. Dies ist die einzige funktionierende Lösung.
Gänseblümchen
1
beste Antwort für vscode settings.json. (Wenn Sie workspace.xml verwenden, ist die akzeptierte Antwort möglicherweise der richtige Weg, kann aber nicht sicher sagen. Ich verwende auch einen gemischten Arbeitsbereich.) Vielen Dank für die Lösung.
Keine
1
Dies sollte die Antwort sein.
Richard Li
1
Das hat bei mir funktioniert! Der Referenzlink erklärt perfekt. TL; DR; Bei vom Benutzer erstellten lokalen Skripten in Unterverzeichnissen hilft die obige Einstellung dem Python-Interpreter, das Unterverzeichnis als eigenen Arbeitsbereich zu erkennen. Anschließend Skripte im Arbeitsbereich erkennen und Importe auflösen, wenn ganze Module oder einzelne Methoden importiert werden.
Avid Programmer
3
Hallo zusammen! Ich habe festgestellt, dass ["./path-to-your-code"] in jedem Fall ["./**"] sein kann, wenn ein Doppelstern einen Unterordner im Stammverzeichnis bedeutet! Dies ist eine einfachere Lösung.
Alan23273850
58

Alternativ: Verwenden Sie die Befehlsoberfläche!

Cmd/ Ctrl+ Shift+ PPython: Wählen Sie Interpreter → Wählen Sie das mit den Paketen, nach denen Sie suchen:

Geben Sie hier die Bildbeschreibung ein

ted
quelle
2
In meinem Fall hat dies nicht funktioniert, aber hoffentlich hilft es anderen bei diesem Problem.
JAC
Ja, das ist der Geist, es ist keine komplizierte Lösung, es ist das, was für mich passiert ist :)
Ted
Das hat bei mir funktioniert. Falls sich noch jemand im Jahr 2019 wunderte.
Safder
@ Safer nicht für mich. using virtualenv
dillon.harless
37

Dieses Problem wurde bereits auf GitHub geöffnet:

Python ungelöstes Importproblem # 3840

Es gibt zwei sehr nützliche Antworten von MagnuesBrzenk und SpenHouet.

Die derzeit beste Lösung besteht darin, eine ENV-Datei in Ihrem Projektstammordner zu erstellen. Fügen Sie dann einen PYTHONPATH wie folgt hinzu:

PYTHONPATH=YOUR/MODULES/PATH

Und in Ihrer settings.json hinzufügen:

"python.envFile": ".env"
Tomasz Chudzik
quelle
5
Danke, das hat perfekt funktioniert! "${workspaceFolder}/.env" PYTHONPATH=FolderName
KowaiiNeko
1
Bei der Verwendung des Microsoft Python Language Servers trat häufig ein Problem mit bearbeitbaren Installationen auf. Es sieht jedoch so aus, als ob derzeit nach dem hier beschriebenen neuen Fix: github.com/microsoft/python-language-server/issues/… das Problem behoben wurde und jeder Import mit ExtraPaths hinzugefügt werden kann. Weitere Hilfe finden Sie in dieser Fehlerbehebung: github.com/microsoft/python-language-server/blob/master/…
Tomasz Chudzik
Danke @TomaszChudzik - Einstellung: "python.autoComplete.extraPaths": ["./src"] hat wie ein Zauber funktioniert!
Robert
Eine andere Lösung besteht darin, Ihre Codebasis-Module in Ihre virtuelle Umgebung einzufügen ( add2virtualenv YOUR/MODULES/PATHz. B. mithilfe ) und diese virtuelle Umgebung als Python-Interpreter auszuwählen.
Antwan
20

Wenn Sie diesen Code in Ihrer settings.jsonDatei haben, löschen Sie ihn:

{
    "python.jediEnabled": false
}
sps
quelle
31
Es ist besser, ein bisschen Erklärung hinzuzufügen.
Tiw
1
Das Bearbeiten dieser Zeile ist eine große Änderung in Ihrem Projekt. Zeile: "python.jediEnabled": false deaktiviert den alten Sprachserver und aktiviert den neuen Microsoft Python Language Server. Schauen Sie hier: github.com/Microsoft/vscode-python/issues/2177 Ich denke, es ist viel einfacher, nur die erforderlichen Abhängigkeiten zu unserer envFile hinzuzufügen. Es ist in einer anderen Antwort beschrieben. Mit dem neuen Microsoft Python Language Server funktioniert Intellisense für mich viel besser.
Tomasz Chudzik
Für mich ist es umgekehrt, jedi in settings.json zu aktivieren, funktioniert für mich. Weitere Informationen finden
Sie
@Tiw zumal eine andere Antwort genau das Gegenteil nahelegt.
Neinstein
19

Ich konnte dieses Problem beheben, indem ich jedi in .vscode \ settings.json aktivierte

"python.jediEnabled": true

Referenz von https://github.com/Microsoft/vscode-python/issues/3840#issuecomment-456017675

Nairb
quelle
Ich wurde von Anfang an aktiviert. Glück Sie
lone_coder
1
Unbekanntes Konfigurations-Python 3.8 unter v2020.8.10 der VSC-Python-Erweiterung
Clocker
15

Wenn Sie visueller sind als ich, können Sie die Visual Studio Code-Konfigurationen im Menü DateiEinstellungenEinstellungen ( Ctrl+ ,) verwenden. Gehen Sie zu ErweiterungenPython .

Fügen Sie im Abschnitt Analyse: Deaktiviert die Unterdrückung der folgenden Meldung hinzu unresolved-import::

Visual Studio Code-Einstellungen

David
quelle
3
Der ungelöste Import für relative Importe ist eindeutig falsch, dies beseitigt ihn.
Satya Mishra
14

Wenn ich das mache > reload window, wird es behoben.

Referenz: Python ungelöstes Importproblem # 3840, Kommentar von dkavraal

Ali Hesari
quelle
Die Warnung wird nur ausgeblendet, wenn ich auf die Datei klicke. Sie wird erneut angezeigt!
Vijay Athithya
Ist ">" wörtlich oder Teil einer Eingabeaufforderung?
Peter Mortensen
Es funktioniert auch für mich, danke
WLiu
9

Sie müssen den der virtuellen Umgebung zugeordneten Interpreter auswählen.

Geben Sie hier die Bildbeschreibung ein

Klicken Sie hier (in der unteren Statusleiste):

Geben Sie hier die Bildbeschreibung ein

Wählen Sie einfach die virtuelle Umgebung aus, mit der Sie arbeiten. Erledigt.

Manchmal funktioniert es sogar mit dem ausgewählten Interpreter nicht. Wiederholen Sie den Vorgang einfach noch einmal und er sollte ihn lösen.

Geben Sie hier die Bildbeschreibung ein

Evandro Pomatti
quelle
1
Dies war genau mein Problem (auf dem Mac) und die Auswahl des richtigen Interpreters löste es. Vielen Dank!
Mahm00d
6

Keine der Lösungen funktionierte außer dieser. Das Ersetzen von "Pylance" oder "Microsoft" in der settings.json löste meine.

"python.languageServer": "Jedi"
hexr
quelle
5

Ich frage mich, wie viele Lösungen dieses Problem hat (oder nicht). Ich habe die meisten der oben genannten Versuche ausprobiert. Nichts hat funktioniert. Die einzige Lösung, die funktioniert hat, besteht darin, den Python-Sprachserver in der Datei settings.json auf Jedi anstatt auf Microsoft zu setzen:

"python.languageServer": "Jedi"
Georges
quelle
4

Meine Lösung

Diese Lösung gilt nur für das aktuelle Projekt.

  1. Erstellen Sie im Projektstamm einen Ordner .vscode

  2. Dann erstellen Sie die Datei .vscode/settings.json

  3. Fügen Sie in der Datei setting.jsondie Zeile hinzu (dies ist für Python 3).

    {
        "python.pythonPath": "/usr/local/bin/python3",
    }
    
  4. Dies ist das Beispiel für Python 2

    {
        "python.pythonPath": "/usr/local/bin/python",
    }
    
  5. Wenn Sie nicht wissen, wo sich Ihre Python-Installation befindet, führen Sie einfach den Befehl which pythonoder which python3das Terminal aus. Der Python-Speicherort wird gedruckt.

  6. Dieses Beispiel funktioniert für Dockerized Python - Django.

Rolly
quelle
4

Für mich hing das Problem mit dem Projekt zusammen, an dem ich arbeitete. Ich habe eine Weile gebraucht, um es herauszufinden, also hoffe ich, dass dies hilft:

Ursprüngliche Ordnerstruktur:

    root/
    __init__.py  # Empty

        folder/
            __init__.py # Empty

            sub_folder_b/
                my_code.py
            sub_folder_c/
                another_code.py

In another_code.py:

from folder.sub_folder_b import my_code.py

Dies hat den Intellisense in Visual Studio Code nicht ausgelöst, aber OK ausgeführt.

Auf der anderen Seite hat das Hinzufügen von "root" zum Importpfad die Intellisense-Funktion aktiviert, bei der Ausführung jedoch ModuleNotFoundError ausgelöst:

from root.folder.sub_folder_b import my_code.py

Die Lösung bestand darin, die Datei _ init _.py im Verzeichnis "folder" zu entfernen und nur die Datei _ init _.py unter zu belassen /root.

NicoE
quelle
3

Keine der vorherigen Antworten hat bei mir funktioniert. Das Hinzufügen der beiden folgenden Zeilen zu meiner Datei settings.json hat dies jedoch getan.

"python.analysis.disabled": [
    "unresolved-import"
],
"python.linting.pylintArgs": ["--load-plugin","pylint_protobuf"]

Die erste Zeile verbirgt wirklich nur den Flusenfehler. Sicherlich keine dauerhafte Lösung, aber der Bildschirm wird unübersichtlich.

Diese Antwort gab mir die zweite Zeile: VS Code PyLint Fehler E0602 (undefinierte Variable) mit ProtoBuf kompilierter Python Structure

Vielleicht kann jemand, der Python besser versteht als ich, das noch mehr erklären.

dillon.harless
quelle
3

Die Lösung von Shinebayar G hat funktioniert, aber diese andere ist etwas eleganter:

Kopiert aus Python ungelöstes Importproblem # 3840 :

Bei folgender Beispielprojektstruktur:

  • workspaceRootFolder
    • .vscode
  • ... andere Ordner
  • codeFolder

Was ich getan habe, um dieses Problem zu beheben:

  1. Gehen Sie in den Arbeitsbereich-Ordner (hier workspaceRootFolder) und erstellen Sie eine .env-Datei
  2. Fügen Sie in dieser leeren .env-Datei die Zeile PYTHONPATH = codeFolder hinzu (ersetzen Sie codeFolder durch Ihren Ordnernamen).
  3. Fügen Sie "python.envFile": "$ {workspaceFolder} /. Env" zur settings.json hinzu
  4. Starten Sie Visual Studio Code neu
Lincoln
quelle
2

Das funktioniert bei mir:

Öffnen Sie die Befehlspalette ( Ctrl+ Shift+ P) und wählen Sie "Python: Interpreter auswählen".

Dabei legen Sie den Python-Interpreter in Visual Studio Code fest.

Evandro Brunassi
quelle
in meinem Fall. Mein Python 2-Interpreter funktioniert einwandfrei. Nur mein Python 3 kann nicht sehr gut zusammenarbeiten
lone_coder
2

Dies liegt daran, dass Visual Studio Code Ihren aktuellen Ordner als Hauptordner betrachtet, anstatt den tatsächlichen Hauptordner.

Die schnelle Lösung besteht darin, den Interpreterpfad zum Hauptordner anzugeben.

Drücken Sie Command+ Shift+ P(oder Ctrl+ Shift+ Pauf den meisten anderen Systemen).

Geben Sie Python Interpreter ein

Wählen Sie aus den verfügbaren Optionen den Pfad aus, in dem Sie Python installiert haben.

Dhruvita Banugaria
quelle
2

Das Ändern von Python: Language Server in 'Jedi' hat bei mir funktioniert. Anfangs war es 'Windows'.

Kirill Kruglov
quelle
1

Ich habe eine andere Lösung: Meine Visual Studio Code-Instanz hat die darin gespeicherte virtuelle Umgebung aufgenommen .venv, verwendet jedoch die falsche Python-Binärdatei. Es wurde benutzt .venv/bin/python3.7; Verwenden des Umschalters in der blauen Statusleiste.

Ich habe es geändert .venv/bin/pythonund alle meine Importe wurden korrekt aufgelöst.

Ich weiß nicht, was Visual Studio Code hinter den Kulissen tut, und ich verstehe auch nicht, warum dies mein Problem verursacht hat, aber für mich war dies eine etwas einfachere Lösung als das Bearbeiten meiner Arbeitsbereichseinstellungen.

Dawngerpony
quelle
0

Installieren Sie im Falle eines Pylint-Fehlers Folgendes

pipenv install pylint-django

Erstellen Sie dann eine Datei, .pylintrc , im Stammordner und schreiben Sie Folgendes

load-plugins=pylint-django
Nilakantha Singh Deo
quelle
0

Ich habe den Importfehler durch Ctrl+ Shift+ behoben P. Geben Sie "Einstellungen" ein und wählen Sie die Option " Einstellungen öffnen" (JSON).

Und füge die Zeile hinzu "python.pythonPath": "/usr/bin/"

Der JSON-Inhalt sollte also folgendermaßen aussehen:

{
    "python.pythonPath": "/usr/bin/"
}

Behalten Sie andere Konfigurationszeilen bei, wenn diese vorhanden sind. Dies sollte alle Module importieren, die Sie mit PIP für die automatische Vervollständigung installiert haben.

Ashish
quelle
0

Meine Lösung bestand darin, Visual Studio Code in einem vorherigen Verzeichnis zu öffnen.

Jeremias Caceres
quelle
Was meinst du mit "vorheriges Verzeichnis" ? Meinen Sie "übergeordnetes Verzeichnis" ? Oder etwas anderes?
Peter Mortensen
Ich öffne VSCode nur mit der Konsole in einem Verzeichnis vor dem Projekt
Jeremias Caceres
0

In meinem Fall hatte ich bereits eine Conda- Umgebung aktiviert, aber ich wollte immer noch, dass lokale Python-Module für die automatische Vervollständigung, die Peeking-Definition usw. verfügbar sind.

Ich habe viele Lösungen ausprobiert, z. B. das Hinzufügen einer Liste von Python-Pfaden usw., aber was es schließlich für mich gelöst hat, war, eine symbolische Verknüpfung von Conda lib/python{your version}/site-packageszu meinem lokalen Modul herzustellen.

Kerem T.
quelle
0

Ich habe eine Bibliothek, die beim Versuch, sie mithilfe des Jedi-Sprachdienstes einzuschließen, fehlerhaft ist und ohne sie einwandfrei funktioniert (dh die C # 1).

Die Bibliothek ist jsonslicer und hängt von einer externen C-Bibliothek ab, in die ich installiert habe /usr/local/lib. Könnte das etwas damit zu tun haben?

Ich habe den Jedi-Dienst und die Bibliothek in meiner Conda- Umgebung installiert und diese Umgebung in Visual Studio verwendet. Es funktioniert zur Laufzeit und in meinem Terminal einwandfrei, jedoch nicht, wenn in meinen Quelldateien nach Problemen gesucht wird, und es wird als Fehler angezeigt.

richtera
quelle
0

Stellen Sie zunächst sicher, dass Sie das Plugin installiert haben, aber es ist wahrscheinlich, dass das Arbeitsbereichsverzeichnis nicht richtig eingestellt ist. Überprüfen Sie einfach Pylint und bearbeiten Sie die zugrunde liegende Datei settings.json.

{
    "python.pythonPath": "/usr/local/bin/python3",
    "git.ignoreLimitWarning": true
}
Kevin Lee
quelle
Was meinst du mit "check Pylint" ? Ein Kontrollkästchen? Dass es existiert / installiert ist? Etwas anderes? Antworten Sie , indem Sie Ihre Antwort bearbeiten , nicht hier in Kommentaren (und ohne "Bearbeiten:", "Aktualisieren:" oder ähnlich).
Peter Mortensen
0

Installieren Sie Code-Runner und fügen Sie den folgenden Code im Ordner settings.json hinzu:

    "code-runner.executorMap": {
        "python": "python3 -u",
    }

"python": "(die mit Modulen oder ihrem Pfad ausführbare Python-Datei) -u",

Hong Z.
quelle
Was ist "Code-Runner"? Können Sie einen Verweis darauf hinzufügen (indem Sie Ihre Antwort bearbeiten , nicht hier in den Kommentaren)?
Peter Mortensen
0

Ich habe dieses Problem auf drei Arten angegangen. Obwohl für jeden von ihnen eine Lösung in den Antworten auf diese Frage verfügbar ist, dachte ich nur daran, alles zusammenzustellen.

  1. Zuerst bekam ich beim Importieren einiger Module einen "ungelösten Import" und bemerkte, dass meine Installationen in globaler Pip statt in der virtuellen Umgebung stattfanden.

    Dieses Problem war auf den Python-Interpreter zurückzuführen. Sie müssen den Interpreter in Visual Studio Code mit Shift+ Ctrl+ auswählen Pund dann eingeben Select Python Interpreter. Wählen Sie hier Ihren Venv- Dolmetscher aus.

  2. Das zweite Problem war: Die obige Änderung hat mein Problem nicht vollständig gelöst. Diesmal lag es an der Datei settings.json . Wenn Sie die Datei settings.json nicht in Ihrem Projektverzeichnis haben, erstellen Sie eine und fügen Sie die folgende Zeile hinzu:

        {
            "python.pythonPath": "apis/bin/python"
        }
    

    Dadurch wird Visual Studio Code grundsätzlich angewiesen, den Python-Interpreter zu verwenden, der sich in Ihrem Venv befindet.

  3. Das dritte Problem war beim Importieren eines benutzerdefinierten Python-Moduls oder einer benutzerdefinierten Python-Datei in ein anderes Programm. Dazu müssen Sie die Ordnerstruktur verstehen. Da sich Python in venv in bin befindet, müssen Sie den Ordner Ihres Moduls angeben (meistens den Anwendungsordner). In meinem Fall war es app,

        from app.models import setup_db
    

    Der Import von setup_db aus models.py befindet sich mündlich im App- Ordner.

Nitin Goyal
quelle
0

Wenn Sie verwenden pipenv, müssen Sie den Pfad zu Ihrer virtuellen Umgebung in der settings.jsonDatei angeben . Zum Beispiel :

{
    "python.pythonPath": 
           "/Users/username/.local/share/virtualenvs/Your-Virual-Env/bin/python"
}

Das kann helfen.

Devesh
quelle
0

Ich habe das gleiche Problem mit Python 3.8.5 unter Verwendung von venv, vscode 1.48.2. Ich habe meine Lösung gefunden. In (env-Ordner) enthält / lib / site-packages die Pakete nicht. Ich benutze diese Einstellung (.vscode / settings.json)

   {
        "python.autoComplete.extraPaths": [
            "./**",
        ],
        "python.pythonPath": "env\\Scripts\\python.exe",
        "python.languageServer": "Microsoft"
   }
Nussiger Intarangsi
quelle
0

Wenn jemand so schwachsinnig ist wie ich, hat das Folgende funktioniert.

Alte Ordnerstruktur:

awesome_code.py
__init__.py
    src/
        __init__.py
        stuff1.py
        stuff2.py

Neue Struktur:

awesome_code.py
    src/
        __init__.py
        stuff1.py
        stuff2.py
Astrid
quelle