Błąd „nierozwiązanego importu” Pylint w Visual Studio Code


138

Używam następującej konfiguracji

  • macOS 10.14 (Mojave)
  • Python 3.7.1
  • Visual Studio Code 1.30.0
  • Pylint 2.2.2
  • Django 2.1.4

Chcę użyć lintingu, aby trochę ułatwić sobie życie w Visual Studio Code. Jednak dla każdego importu mam stan „import nierozwiązany”. Nawet przy domyślnych importach Django (np. Z modeli importu django.db).

Przypuszczam, że dzieje się tak, ponieważ nie widzi plików Pythona w środowisku wirtualnym.

Wszystko działa dobrze, ale zaczyna być irytujące.

Opcje interpretera, które mam, to wszystkie wersje systemowe Pythona. Wydaje się, że w ogóle nie widzi mojego środowiska wirtualnego Python (nie znajduje się w tym samym katalogu co mój obszar roboczy, więc ta część ma sens).

Jeśli skonfiguruję python.PythonPath w pliku settings.json , po prostu go zignoruje i nie wyświetli mojej ścieżki środowiska wirtualnego jako opcji. Próbowałem też skonfigurować go w moich globalnych ustawieniach Pythona, ale też się nie pojawia.

Czy istnieje szybkie rozwiązanie, aby to działało?


3
pip install pylint-django, a następnie w ustawieniach kodu vs dodaj to:"python.linting.pylintArgs": [ "--load-plugins=pylint_django", ],
Vaibhav Vishal

@VaibhavVishal niestety nadal otrzymuję te same wyniki (dodałem je do mojego pliku settings.json)
jAC

4
W rzeczywistości jest to problem z VScode, który bardzo późno wykrywa pakiet importu, po ponownym uruchomieniu jest naprawiany automatycznie.
Anupam Haldkar

Odpowiedzi:


116

W ustawieniach obszaru roboczego możesz ustawić ścieżkę Pythona w następujący sposób:

{
    "python.pythonPath": "/path/to/your/venv/bin/python",
}

30
Ten rodzaj działa. W przypadku importu specyficznego dla Pythona rozwiązuje te teraz, ale nie moje własne modele (tj. „From users.models import User” nadal mówi, że nie może tego rozwiązać). Co o tym myślisz?
JAC

7
Niepewny. Spróbuj ponownie załadować okno kodu VS (z powłoki code <project_directory> -r) lub po prostu zrestartuj vscode.
ruddra

5
Nie jestem pewien, czasami może się tak zdarzyć, jeśli katalog obszaru roboczego nie jest poprawnie ustawiony. Upewnij się, że manage.pyznajduje się w katalogu głównym workspace. Upewnij się również, że pylint jest poprawnie skonfigurowany
ruddra

3
ty geniuszu! To dlatego, że mój obszar roboczy nie zaczynał się na głównym poziomie projektu. Po dostosowaniu, zaczęło działać. Dzięki wielkie!
JAC

1
Dzięki wielkie! Pomogło mi pokonać odwieczny problem!

216

Zaakceptowana odpowiedź nie naprawi błędu podczas importowania własnych modułów.

Użyj następującego ustawienia w ustawieniach obszaru roboczego .vscode/settings.json:

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

Odniesienie: Rozwiązywanie problemów, nierozwiązane ostrzeżenia dotyczące importu


4
Mam mieszany obszar roboczy, cały kod Pythona znajduje się w podfolderze. Dodanie .vscode do podfolderu nie zadziała, to jedyne działające rozwiązanie.
stokrotka

1
najlepsza odpowiedź dla vscode settings.json. (jeśli używasz workspace.xml, zaakceptowana odpowiedź może być właściwą drogą, ale nie mogę powiedzieć na pewno. Używam również mieszanego obszaru roboczego). Dziękuję za rozwiązanie.
Brak

3
To powinna być odpowiedź.
Richard Li

1
To zadziałało dla mnie! Link referencyjny doskonale wyjaśnia. TL; DR; W przypadku skryptów lokalnych utworzonych przez użytkownika w podkatalogach powyższe ustawienie pomaga interpreterowi języka Python w rozpoznaniu podkatalogu jako własnego obszaru roboczego. Następnie rozpoznawanie skryptów w obszarze roboczym i rozwiązywanie importów, gdy importowane są całe moduły lub poszczególne metody.
Avid Programmer

5
Cześć wszystkim! Zauważyłem, że ["./path-to-your-code"] może być ["./**"] w każdym przypadku, gdy podwójna gwiazdka oznacza dowolny podfolder w katalogu głównym! To jest prostsze rozwiązanie.
alan23273850

63

Alternatywny sposób: użyj interfejsu poleceń!

Cmd/ Ctrl+ Shift+ PPython: Select Interpreter → wybierz ten z pakietami, których szukasz:

Tutaj wprowadź opis obrazu


2
w moim przypadku to nie zadziałało, ale mam nadzieję, że pomaga innym w tym problemie.
JAC

tak to jest duch, to nie jest skomplikowane rozwiązanie, to właśnie się wydarzyło :)
ted

To zadziałało dla mnie. O ile ktoś jeszcze się zastanawiał w 2019 r.
Safder

@Safder nie dla mnie. using virtualenv
dillon.harless

to działało dla mnie. Ponieważ mam strukturę katalogów, w której każdy projekt Pythona mam nowy venv, z tym venv
wskazuję

41

Ten numer został już otwarty na GitHub:

Nierozwiązany problem importu w Pythonie # 3840

Istnieją dwie bardzo przydatne odpowiedzi, autorstwa MagnuesBrzenk i SpenHouet.

Na razie najlepszym rozwiązaniem jest utworzenie pliku .env w folderze głównym projektu. Następnie dodaj do niego PYTHONPATH w ten sposób:

PYTHONPATH=YOUR/MODULES/PATH

A w swoim settings.json dodaj:

"python.envFile": ".env"

6
Dzięki, zadziałało idealnie! "${workspaceFolder}/.env" PYTHONPATH=FolderName
KowaiiNeko

1
Podczas korzystania z serwera języka Microsoft Python wystąpił częsty problem z instalacjami z możliwością edycji. Jednak wygląda na to, że obecnie po nowej poprawce opisanej tutaj: github.com/microsoft/python-language-server/issues/ ... problem został naprawiony i każdy import można dodać za pomocą ExtraPaths. Więcej pomocy znajdziesz
Tomasz Chudzik

Dzięki @TomaszChudzik - Ustawienie: "python.autoComplete.extraPaths": ["./src"] działało jak marzenie!
Robert

Innym rozwiązaniem jest dodanie modułów bazy kodu do virtualenv (używając add2virtualenv YOUR/MODULES/PATHna przykład) i wybranie tego virtualenv jako interpretera Pythona.
Antwan

21

Jeśli masz ten kod w swoim settings.jsonpliku, usuń go:

{
    "python.jediEnabled": false
}

34
Lepiej dodać trochę wyjaśnienia.
Tiw

1
Edycja tej linii to duża zmiana w Twoim projekcie. Wiersz: "python.jediEnabled": false wyłącza stary serwer językowy i włącza nowy serwer Microsoft Python Language Server. Spójrz tutaj: github.com/Microsoft/vscode-python/issues/2177 Myślę, że znacznie łatwiej jest po prostu dodać niezbędne zależności do naszego pliku envFile. Opisuje to w innej odpowiedzi. Z nowym serwerem języka Microsoft Python, intelisense działa dla mnie znacznie lepiej.
Tomasz Chudzik

Dla mnie jest odwrotnie, włączenie jedi w settings.json działa dla mnie. Zobacz więcej tutaj, stackoverflow.com/a/57269144/2877493
nairb

@Tiw zwłaszcza, że ​​inna odpowiedź sugeruje coś zupełnie przeciwnego.
Neinstein,



17

Jeśli jesteś bardziej wizualny jak ja, możesz użyć konfiguracji Visual Studio Code w menu PlikPreferencjeUstawienia ( Ctrl+ ,). Idź do RozszerzeniaPython .

W sekcji Analiza: Wyłączone dodaj pominięcie następującego komunikatu unresolved-import::

Ustawienia Visual Studio Code


3
Nierozwiązany import dla importu względnego jest wyraźnie niepoprawny, to się go usuwa.
Satya Mishra

To rozwiązuje tylko ostrzeżenie, a nie pukanie do problemów. Jeśli używam metody ścieżki w języku Python, ostrzeżenie o imporcie znika, a także działają funkcje „drążenia w” („goto definition”) i „podpowiedzi parametrów”.
davidfrancis

9

Musisz wybrać tłumacza związanego ze środowiskiem wirtualnym.

Tutaj wprowadź opis obrazu

Kliknij tutaj (na dolnym pasku stanu):

Tutaj wprowadź opis obrazu

I po prostu wybierz środowisko wirtualne, z którym pracujesz. Gotowe.

Czasami nawet po wybraniu tłumacza to nie zadziała. Po prostu powtórz ten proces ponownie i powinien go rozwiązać.

Tutaj wprowadź opis obrazu


1
To był dokładnie mój problem (na Macu) i wybranie odpowiedniego tłumacza go rozwiązało. Dzięki!
Mahm00d

9

Żadne z rozwiązań nie zadziałało oprócz tego. Zastąpienie „Pylance” lub „Microsoft” w pliku settings.json rozwiązało moje.

"python.languageServer": "Jedi"

7

Zastanawiam się, ile rozwiązań ma ten problem (lub nie mam), próbowałem większości z powyższych, nic nie działało, jedynym rozwiązaniem, które działało, jest ustawienie serwera języka python na Jedi zamiast Microsoft w pliku settings.json:

"python.languageServer": "Jedi"

6

Żadna z poprzednich odpowiedzi nie działała dla mnie. Dodanie obu poniższych wierszy do mojego pliku settings.json jednak.

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

Pierwsza linia tak naprawdę po prostu ukrywa błąd lintingu. Z pewnością nie jest to trwałe rozwiązanie, ale porządkuje ekran.

Ta odpowiedź dała mi drugą linię: VS Code PyLint Error E0602 (niezdefiniowana zmienna) ze skompilowaną strukturą Pythona ProtoBuf

Może ktoś, kto rozumie Pythona bardziej niż ja, może to wyjaśnić bardziej.


Cieszę się, że jest to przydatne, ale czy jest ktoś, kto może wyjaśnić tę drugą parę klucz-wartość?
dillon.harless

4

Moje rozwiązanie

To rozwiązanie dotyczy tylko bieżącego projektu.

  1. W katalogu głównym projektu utwórz folder .vscode

  2. Następnie utwórz plik .vscode/settings.json

  3. W pliku setting.jsondodaj linię (dotyczy Pythona 3)

    {
        "python.pythonPath": "/usr/local/bin/python3",
    }
    
  4. To jest przykład dla Pythona 2

    {
        "python.pythonPath": "/usr/local/bin/python",
    }
    
  5. Jeśli nie wiesz, gdzie znajduje się twoja instalacja Pythona, po prostu uruchom polecenie which pythonlub which python3na terminalu. Wyświetli lokalizację Pythona.

  6. Ten przykład działa dla zdokeryzowanego Pythona - Django.


4

Dla mnie problem był związany z projektem, nad którym pracowałem. Zajęło mi trochę czasu, zanim to rozgryzłem, więc mam nadzieję, że to pomoże:

Oryginalna struktura folderów:

    root/
    __init__.py  # Empty

        folder/
            __init__.py # Empty

            sub_folder_b/
                my_code.py
            sub_folder_c/
                another_code.py

W another_code.py:

from folder.sub_folder_b import my_code.py

Nie wywołało to funkcji Intellisense w programie Visual Studio Code, ale została wykonana OK.

Z drugiej strony dodanie „root” do ścieżki importu sprawiło, że Intellisense zadziałało, ale wywołało ModuleNotFoundError podczas wykonywania:

from root.folder.sub_folder_b import my_code.py

Rozwiązaniem było usunięcie pliku _ init _.py w katalogu „folder”, pozostawiając tylko _ init _.py znajdujący się w /root.


3

Rozwiązanie od Shinebayar G zadziałało, ale to drugie jest nieco bardziej eleganckie:

Skopiowano z Pythona nierozwiązany problem importu nr 3840 :

Biorąc pod uwagę następującą przykładową strukturę projektu:

  • workspaceRootFolder
    • .vscode
  • ... inne foldery
  • codeFolder

Co zrobiłem, aby rozwiązać ten problem:

  1. Przejdź do folderu obszaru roboczego (tutaj workspaceRootFolder) i utwórz plik .env
  2. W tym pustym pliku .env dodaj wiersz PYTHONPATH = codeFolder (zamień codeFolder na nazwę swojego folderu)
  3. Dodaj „python.envFile”: „$ {workspaceFolder} /. Env” do pliku settings.json
  4. Uruchom ponownie program Visual Studio Code

2

To działa dla mnie:

Otwórz paletę poleceń ( Ctrl+ Shift+ P) i wybierz „Python: Select Interpreter”.

W ten sposób ustawiasz interpreter języka Python w programie Visual Studio Code.


w moim przypadku. mój interpreter Pythona 2 działa dobrze. po prostu mój python 3 nie jest w stanie współpracować zbyt dobrze
lone_coder

2

Dzieje się tak, ponieważ program Visual Studio Code traktuje bieżący folder jako folder główny, zamiast brać pod uwagę rzeczywisty folder główny.

Szybkim sposobem rozwiązania problemu jest podanie ścieżki tłumacza do głównego folderu.

Naciśnij Command+ Shift+ P(lub Ctrl+ Shift+ Pw większości innych systemów).

Wpisz interpreter języka Python

Wybierz ścieżkę, w której zainstalowałeś Pythona z dostępnych opcji.


2

Zmiana Python: Language Server na „Jedi” działała dla mnie. Początkowo był to „Windows”.


1

Mam inne rozwiązanie: moje wystąpienie Visual Studio Code odebrało virtualenv zapisane w .venv, ale używało niewłaściwego pliku binarnego Pythona. Używał .venv/bin/python3.7; używając przełącznika na niebieskim pasku stanu.

Zmieniłem go na używanie .venv/bin/pythoni wszystkie moje importy zostały poprawnie rozwiązane.

Nie wiem, co robi Visual Studio Code za kulisami, kiedy to robię, ani nie rozumiem, dlaczego spowodowało to mój problem, ale dla mnie było to nieco prostsze rozwiązanie niż edycja ustawień mojego obszaru roboczego.


1

W przypadku błędu Pylint zainstaluj następujące elementy

pipenv install pylint-django

Następnie utwórz plik .pylintrc w folderze głównym i napisz, co następuje

load-plugins=pylint-django

1

Jeśli używasz pipenv, musisz określić ścieżkę do settings.jsonpliku virtual environment.in . Na przykład :

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

To może pomóc.


1

U mnie zadziałało, jeśli skonfiguruję ścieżki dla pythona, pylint i autopep8 do ścieżek środowiska lokalnego.

Dla swojego obszaru roboczego dodaj / zmień to:

"python.pythonPath": "...\\your_path\\.venv\\Scripts\\python.exe",
"python.linting.pylintPath": "...\\your_path\\.venv\\Scripts\\pylint.exe",
"python.formatting.autopep8Path": "...\\your_path\\.venv\\Scripts\\autopep8.exe",

Zapisz i uruchom ponownie VS Code z obszarem roboczym. Gotowe!


U mnie też to zadziałało, a dokładniej ustawienie „python.linting.pylintPath” jest tym, co rozwiązało problem. Nigdy nie miałem tego problemu, dopóki nie zaktualizowałem Pythona do wersji 3.9. Domyślam się, że używają domyślnej ścieżki pylinta.
areed1192

0

Rozwiązałem błąd importu przez Ctrl+ Shift+ P. Wpisz „Ustawienia preferencji” i wybierz opcję Preferencje Otwórz ustawienia (JSON)

I dodaj linię "python.pythonPath": "/usr/bin/"

Tak więc zawartość JSON powinna wyglądać następująco:

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

Zachowaj inne wiersze konfiguracji, jeśli są obecne. Powinno to zaimportować wszystkie moduły, które zostały zainstalowane przy użyciu PIP do autouzupełniania.


0

Moim rozwiązaniem było otwarcie Visual Studio Code w poprzednim katalogu.


Co rozumiesz przez „poprzedni katalog” ? Czy masz na myśli „katalog nadrzędny” ? Albo coś innego?
Peter Mortensen,

Otwieram VSCode tylko z konsolą w katalogu przed projektem
Jeremias Caceres

0

W moim przypadku miałem już aktywowane środowisko Conda , ale nadal chciałem, aby lokalne moduły Pythona były dostępne do autouzupełniania, wglądu do definicji itp.

Próbowałem wielu rozwiązań, takich jak dodanie listy ścieżek Pythona itp., Ale ostatecznie rozwiązałem to dla mnie, tworząc symboliczne łącze z Conda lib/python{your version}/site-packagesdo mojego modułu lokalnego.


0

Mam jedną bibliotekę, która popełnia błąd podczas próby dołączenia jej za pomocą usługi językowej Jedi i działa bez niej (tj. C #).

Biblioteka to jsonslicer i zależy od zewnętrznej biblioteki C, w której zainstalowałem /usr/local/lib . Czy to może mieć z tym coś wspólnego?

Zainstalowałem usługę Jedi i bibliotekę w moim środowisku Conda i korzystałem z tego środowiska w Visual Studio. Działa dobrze w czasie wykonywania i na moim terminalu, ale nie podczas sprawdzania problemów w moich plikach źródłowych i pojawia się jako błąd.


0

Najpierw upewnij się, że zainstalowałeś wtyczkę, ale prawdopodobnie katalog obszaru roboczego nie jest poprawnie ustawiony. Po prostu sprawdź Pylint i edytuj podstawowy plik settings.json.

{
    "python.pythonPath": "/usr/local/bin/python3",
    "git.ignoreLimitWarning": true
}

Co masz na myśli mówiąc „sprawdź Pylint” ? Pole wyboru? Czy istnieje / jest zainstalowany? Coś innego? Odpowiedz, edytując swoją odpowiedź , a nie tutaj w komentarzach (i bez „Edytuj:”, „Aktualizuj:” lub podobnego).
Peter Mortensen,

0

Zainstaluj program uruchamiający kod i dodaj poniższy kod w folderze settings.json:

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

"python": "(plik wykonywalny Pythona z modułami lub jego ścieżką) -u",


Co to jest „program uruchamiający kod”? Czy możesz dodać do niego odniesienie ( edytując swoją odpowiedź , nie tutaj w komentarzach)?
Peter Mortensen,

0

Zmierzyłem się z tym problemem na trzy sposoby. Chociaż dla każdego z nich w odpowiedziach na to pytanie dostępne jest rozwiązanie, po prostu pomyślałem, że to wszystko połączę.

  1. Najpierw otrzymałem „Nierozwiązany import” podczas importowania niektórych modułów i zauważyłem, że moje instalacje odbywały się w globalnym pip, a nie w środowisku wirtualnym.

    Ten problem był spowodowany przez interpreter języka Python. Musisz wybrać interpreter w Visual Studio Code za pomocą Shift+ Ctrl+, Pa następnie wpisz Select Python Interpreter. Wybierz tutaj swojego tłumacza venv .

  2. Drugi problem: powyższa zmiana nie rozwiązała całkowicie mojego problemu. Tym razem było to spowodowane plikiem settings.json . Jeśli nie masz pliku settings.json w katalogu projektu, utwórz go i dodaj w nim następujący wiersz:

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

    To po prostu powie programowi Visual Studio Code, aby używał interpretera języka Python, który znajduje się w pliku venv.

  3. Trzeci problem dotyczył importowania niestandardowego modułu lub pliku Pythona w innym programie. W tym celu musisz zrozumieć strukturę folderów. Ponieważ Python in venv znajduje się w bin, będziesz musiał określić folder swojego modułu (w większości przypadków folder aplikacji). W moim przypadku było to app,

        from app.models import setup_db
    

    Werbalnie zaimportuj setup_db z models.py znajduje się w folderze aplikacji .


0

Mam ten sam problem z Pythonem 3.8.5 przy użyciu venv, vscode 1.48.2 Znalazłem swoje rozwiązanie. W (folder env) / lib / site-packages nie zawiera pakietów. Używam tego ustawienia (.vscode / settings.json)

   {
        "python.autoComplete.extraPaths": [
            "./**",
        ],
        "python.pythonPath": "env\\Scripts\\python.exe",
        "python.languageServer": "Microsoft"
   }
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.