PyCharm pokazuje błąd nierozwiązanych referencji dla prawidłowego kodu

279

Korzystam z PyCharm do pracy nad projektem. Projekt jest otwierany i konfigurowany za pomocą interpretera i może zostać pomyślnie uruchomiony. Ścieżki zdalnego tłumacza są poprawnie odwzorowane. Wygląda na to, że jest to poprawna konfiguracja, ale PyCharm wyróżnia mój prawidłowy kod błędami „nierozwiązanego odwołania”, nawet dla wbudowanych funkcji Pythona. Dlaczego nie są one wykrywane, mimo że kod działa? Czy istnieje sposób, aby PyCharm rozpoznał je poprawnie?


Ten konkretny przypadek problemu dotyczy zdalnego tłumacza, ale problem pojawia się również na lokalnych tłumaczach.

James McCalden
źródło
Mam ten sam problem i rozwiązałem go. Oto rozwiązanie .
Maks

Odpowiedzi:

445

Plik | Unieważnij pamięć podręczną ... i ponowne uruchomienie PyCharm pomaga.

Dmitrij Trofimow
źródło
3
W moim przypadku jest to jedyny sposób pracy z PyCharm 4.0.x. Faktem jest, że jeśli coś się zepsuło i nie odświeża (czasami pokazuje nawet tego samego interpretera powtarzanego kilka razy na liście) będziesz musiał ręcznie usunąć pliki ... Musiałem nawet raz usunąć foldery .idea .
Danius
10
To jest tak ciężkie. Czy nie ma możliwości odzyskania starej opcji „ścieżki odświeżania” w PyCharm 4.5?
Chris Withers,
6
Naprawdę denerwujące jest to, że takie IDE nie zajmuje się tak prostą operacją.
Eduardo Pignatelli,
3
To działa chwilowo. Po kilku minutach znów otrzymuję to samo ostrzeżenie
Aseem,
Przyjęta odpowiedź jest ciężka i najprawdopodobniej nie odnosi się do sedna problemu. Oto informacje prosto z pyska konia: JetBrains - root zawartości PyCharm „PyCharm używa źródeł źródła jako punktu wyjścia do rozwiązywania importów” Miałem problem dokładnie tak, jak w tytule, ponieważ w niektórych projektach muszę używać drzewa plików, w którym źródła znajdują się w podfolderze, PyCharm jest wtedy zdezorientowany co do importu. Zabicie pamięci podręcznej może na chwilę pomóc, ale nie jest właściwym podejściem. Oznacz katalog źródeł jako root i wszystko jest w porządku.
predmod
133

Odpowiedź Dmitry'ego nie zadziałała dla mnie.

Zacząłem pracę, przechodząc do Projektantów, wybierając zakładkę „Ścieżki” i naciskając przycisk odświeżania w tym podmenu. Automatycznie wypełnia się czymś, co nazywa się „szkieletami pytona”.

edycja : zrzut ekranu przy użyciu PyCharm 3.4.1 (jest dość dobrze ukryty)

wprowadź opis zdjęcia tutaj

kelorek
źródło
6
Gdzie jest „Python Interpreters”. Masz na myśli „Project Interpreters”? Używam Linuksa i nie mogłem znaleźć zakładki Ścieżki.
Baskaya,
1
W PyCharm 3.4 na OSX jest to ikona, która wygląda jak małe drzewo folderów i nie mówi „Ścieżki”.
Daniel Bushman,
12
Dla każdego, kto nadal jest zdezorientowany (w PyCharm 3.4.1):Settings > Project Settings > Project Interpreter > Project Interpreters (gear button > more) > --Select the interpreter-- > Interpreter Paths (Directory Tree button on the right) > Reload List of Paths (Blue refresh-like button)
raphaeltm
5
W PyCharm 4 nie ma takiego przycisku odświeżania, tylko znaki plus i minus.
dtheodor
3
@ Sarah W PyCharm 4.0.4 w oknie „Ścieżki tłumacza” nie mam przycisku „przeładuj listę ścieżek” (dolna niebieska ikona odświeżania). Ponadto nie widzę żadnych ścieżek na liście, a przyciski plus i minus są wyłączone.
Henrik Heimbuerger
70

Istnieje wiele rozwiązań tego problemu, niektóre są wygodniejsze niż inne i nie zawsze działają.

Oto wszystko, czego możesz spróbować, od „szybkiego” do „irytującego”:

  • Wykonaj File-> Invalidate Caches / Restarti uruchom ponownie PyCharm.
    • Możesz to zrobić po dowolnej z poniższych metod, dla pewności.
  • Najpierw sprawdź, którego tłumacza używasz: Run-> Edit Configurations-> Configuration-> Python Interpreter.
  • Odśwież ścieżki swojego tłumacza:
    • File -> Settings
    • Project: [name]-> Project Interpreter-> „Project Interpreter”: Ikona koła zębatego ->More...
    • Kliknij przycisk „Pokaż ścieżki” (dolny)
    • Kliknij przycisk „Odśwież” (dolny)
  • Usuń tłumacza i dodaj go ponownie:
    • File -> Settings
    • Project: [name]-> Project Interpreter-> „Project Interpreter”: Ikona koła zębatego ->More...
    • Kliknij przycisk „Usuń”
    • Kliknij przycisk „Dodaj” i ponownie dodaj tłumacza
  • Usuń preferencje projektu
    • Usuń .ideafolder swojego projektu
    • Zamknij i ponownie otwórz PyCharm
    • Otwórz swój projekt od podstaw
  • Usuń preferencje użytkownika PyCharm (ale najpierw wykonaj kopię zapasową).
    • ~/.PyCharm50 na Macu
    • %homepath%/.PyCharm50 w systemie Windows
  • Przełącz się na innego tłumacza, a następnie z powrotem na żądanego.
  • Utwórz nowe środowisko wirtualne i przejdź do interpretera tych środowisk.
  • Przełącz się całkowicie na innego tłumacza, nie przełączaj się z powrotem.
florisla
źródło
Mam ten problem tak długo, jak korzystam z PyCharm i nadal nie mogą go w sposób niezawodny rozwiązać. Dobrze, że omówiłeś większość pracy w ten czy inny sposób, w końcu rozwiązując problem. Zabawne, że od czasu do czasu wracam do tej odpowiedzi, aby dowiedzieć się, co działa wokół, o czym zapomniałem spróbować.
Alex
3
Poszedłem w dół tej listy i działało dla mnie usunięcie / ponowne dodanie interpretera. Dzięki!
Mark
16

W moim przypadku była to struktura katalogów. Mój projekt wygląda następująco:

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

Kliknij prawym przyciskiem myszy dir_b> „zaznacz katalog jako”> „root projektu”

Shoham
źródło
2
Pytanie nie polegało na tym, że PyCharm nie rozpoznaje kodu projektu . Nie rozpoznaje standardowych metod wbudowanych w Python.
florisla
Rozwiązałem mój problem w PyCharm 2019.3.3 na MacOS
samisnotinsane
11

Czuję, że usuwam i ponownie dodam zdalnego interpretera, aby rozwiązać ten problem, gdy nie działa Unieważnianie pamięci podręcznej lub odświeżanie ścieżek.

Używam włóczęgów i co jakiś czas, jeśli dodam nową maszynę wirtualną do mojej konfiguracji multi-vm, zmieniany jest przekazywany port i wydaje się to mylić PyCharm, gdy próbuje użyć niewłaściwego portu dla SSH. Zmiana portu wydaje się nie pomagać w uszkodzonych referencjach.

Thomas Farvour
źródło
10

Jeśli żadne inne rozwiązanie nie działa, spróbuj (wykonać kopię zapasową) i usunąć folder ~ / .PyCharm40, a następnie ponownie otwórz PyCharm. To zabije również wszystkie twoje preferencje.

Na Macu chcesz usunąć ~ / Library / Caches / Pycharm40 i ~ / Library / Preferences / PyCharm40.

A w systemie Windows: C: \ Users \ $ USER.PyCharm40.

Imran
źródło
10

Testowane z PyCharm 4.0.6 (OSX 10.10.3), wykonując następujące kroki:

  1. Kliknij menu PyCharm.
  2. Wybierz Project Interpreter.
  3. Wybierz ikonę koła zębatego.
  4. Wybierz przycisk Więcej.
  5. Wybierz Project Interpreter, w którym jesteś.
  6. Wybierz przycisk Drzewo katalogów.
  7. Wybierz Przeładuj listę ścieżek.

Problem rozwiązany!

Siripan
źródło
10

bardzo łatwe

musisz tylko zaznaczyć swój katalog główny jako: SOURCE ROOT (czerwony), a twoje aplikacje: EXCLUDED ROOT (niebieski),

nierozstrzygnięte odniesienie zniknie.

  • wprowadź opis zdjęcia tutajjeśli korzystasz z PyChram pro, zrób to automatycznie.
Mujad
źródło
5
Mam pycharm pro i nie zrobiło to dla mnie, ale po ręcznym zaznaczeniu folderów poprawnie zadziałało
Jose
Tak, to właściwa odpowiedź, a nie jakakolwiek opcja nuklearna, w której efekt uboczny pomaga przez chwilę, ale nie odnosi się do tego, jak myśli oprzyrządowanie jetbrains („zabij pamięć podręczną”, prawda… a kiedy zostanie odbudowana? ”Zabić ją ponownie ! ”). Tytuł, który był dokładnie problemem w moich projektach, gdzie katalog główny projektu niekoniecznie jest źródłem źródłowym, a import nie rozumie tego. Oto informacje prosto z pyska koni jetbrains.com/help/pycharm/content-root.html „PyCharm używa źródeł źródłowych jako punktu wyjścia do rozwiązania importu”!
predmod
6

Przepraszam, że wpadłem na to pytanie, ale mam ważną aktualizację do wykonania.

Możesz także przywrócić interpreter projektu do Python 2.7.6, jeśli używasz innej wersji niż ta. To działało dla mnie w mojej instalacji PyCharm 4.04 Professional w Ubuntu po tym, jak żadne inne zalecenia nie rozwiązały mojego problemu.

Fairlight Evony
źródło
1
Przełączenie się na lokalny interpreter języka Python 2, a następnie powrót do zdalnego interpretera języka Python 3 również to rozwiązało.
James Fletcher
Działa to również w PyCharm 5 Professional. Żadne inne rozwiązanie w tym poście nie działało dla mnie. Wszedłem do Settings -> "Project Interpreters"środka, kliknąłem koło zębate, a potem "More...". Wybierz domyślny interpreter Pythona ( /usr/bin/python2.7w moim przypadku), naciśnij "Ok"i "Apply". Potem wróciłem i wybrałem rzeczywistego virtualenv, którego chciałem użyć. "Ok"i "Apply"znowu, i to jest naprawione.
Josh
Podobnie FileNotFoundErrorjest w przypadku Python-3. Po ustawieniu poprawnego interpretera w konfiguracjach Plik-Ustawienia-Projekt-Interpreter i Uruchom-Edytuj-Konfiguracje, jedna z tych sprawiła, że ​​błąd zniknął.
Bob Stein,
3

Możesz spróbować zamknąć Pycharm, usunąć .ideafolder z projektu, a następnie ponownie uruchomić Pycharm i odtworzyć projekt. To działało dla mnie, podczas gdy unieważnianie pamięci podręcznej nie.

Jason McVetta
źródło
2

W końcu zacząłem działać, gdy żadne z proponowanych rozwiązań nie zadziałało. Bawiłem się projektem szkieletu odpoczynku django i korzystałem z virtualenv, który miałem przy nim skonfigurowany. Byłem w stanie naprawić Pycharm, zaznaczając folder główny jako źródłowy root, ale wtedy serwer django generował wyjątki rozstrzygania. Tak więc jeden działałby, gdy drugi nie, i odwrotnie.

Ostatecznie po prostu musiałem oznaczyć podfolder jako źródła zrootowane w pycharm. Więc moja struktura była taka

-playground
     -env
     -playground

Ten drugi folder placu zabaw to ten, który musiałem oznaczyć jako źródło root, aby wszystko działało zgodnie z oczekiwaniami. To nie przedstawiało żadnych problemów w moim scenariuszu, więc było to wykonalne rozwiązanie.

Pomyślałem, że podzielę się, na wypadek, gdyby ktoś mógł go użyć.

użytkownik2233949
źródło
2

Może to być także problem z wersją Pythona. Musiałem wybrać właściwy, aby działał. wprowadź opis zdjęcia tutaj

Shehaaz
źródło
2

Jeśli chcesz zignorować tylko niektóre błędy „nierozwiązanego odwołania”, możesz również wyraźnie to powiedzieć PyCharm, umieszczając to przed swoją klasą / metodą / funkcją:

# noinspection PyUnresolvedReferences
flix
źródło
1

Wszystkie pozostałe projekty zamknąłem i samodzielnie uruchomiłem wymagany projekt w Pycharmie. Utworzyłem osobne virtualenv od pycharm i dodałem w nim wszystkie wymagane moduły za pomocą pip. Dodałem to wirtualne środowisko do interpretera projektu. To rozwiązało mój problem.

Waqar Detho
źródło
1

Rany, co za koszmar, moje połączenie różnych odpowiedzi StackOVerflow:

  1. Przejdź do lokalnego tłumacza /usr/bin/pythonX.X i zastosuj
  2. Wyświetl ścieżki jak wyżej
  3. Znajdź ścieżkę szkieletów. Mój był (/home/tim/Desktop/pycharm-community-2016.2.3/helpers/python-skeletons)
  4. Wróć z powrotem do interpretera virt i ręcznie dodaj ścieżkę szkieletów, jeśli nie pojawiła się automatycznie.
Tim
źródło
1

Żadne z powyższych rozwiązań nie działało dla mnie!
Jeśli używasz środowiska wirtualnego do swojego projektu, pamiętaj o zastosowaniu python.exepliku znajdującego się w katalogu środowiska wirtualnego jako interpretera projektu, (Alt + Ctrl + Shift + S) to rozwiązało problem.

Ali Sherafat
źródło
1

W moim przypadku błąd kontroli pojawia się z powodu bardzo szczególnego przypadku kodu python. Funkcja min, która zawiera dwie funkcje numpy i dwa dostępy do listy, powoduje, że moja kontrola kodu daje tego rodzaju błędy.

Usunięcie wiersza „d = 0” w poniższym przykładzie daje nierozwiązany błąd referencyjny zgodnie z oczekiwaniami, ale odczyt nie powoduje, że błąd zniknie dla inspektora kodu. Nadal mogę później wykonać kod bez problemów.

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])

Czyszczenie pamięci podręcznej i ponowne ładowanie listy ścieżek nie działa. Działa tylko modyfikacja kodu za pomocą jednej z następujących przykładowych łat:

  • Kolejne uporządkowanie parametrów „min”: schematycznie SUTV, ale nie STUV lub TSUV
  • Użycie metody zamiast funkcji: S [d] .abs () zamiast np.abs (S [d])
  • Korzystanie z wbudowanej funkcji abs ()
  • Dodanie liczby do wybranego parametru: U [d] + 0.
Wannes Goethals
źródło
1

Żadna z odpowiedzi nie rozwiązała mojego problemu.

Dla mnie to zmieniło środowiska i wróciło do tego samego środowiska. File->Settings->Project interpreter

Używam środowisk Conda.

Kristjan Kica
źródło
1

Pracował dla mnie z dużo prostszą akcją :


File > Settings > Project > Project Interpreter 
> Select "No interpreter" in the "Project interpreter" list 
> Apply > Set your python interpreter again > Click Apply

Zysk - Pycharm aktualizuje szkielety i wszystko jest w porządku.

Alexander.Iljushkin
źródło
0

Jeśli używasz, vagrantbłąd może być spowodowany nieprawidłowym interpreterem Pythona. W naszym vagrantkorzystamy, pyenvwięc musiałem zmienić Python Interpreter pathścieżkę z /usr/bin/pythonna/home/vagrant/.pyenv/versions/vagrant/bin/python wprowadź opis zdjęcia tutaj

Daniil Mashkin
źródło
0

Mam projekt, w którym jeden plik src/importuje inny plik w tym samym katalogu. Aby PyCharm rozpoznał, musiałem przejść do Plik> Ustawienia> Projekt> Struktura projektu> wybrać srcfolder i kliknąć „Oznacz jako: źródła”

Od https://www.jetbrains.com/help/pycharm/configuring-folders-within-a-content-root.html

Źródłowe katalogi główne zawierają rzeczywiste pliki źródłowe i zasoby. PyCharm używa źródłowych źródeł jako punktu wyjścia do rozwiązania importu

qwr
źródło
0

Mój problem polega na tym, że Flask-WTF nie jest rozwiązany przez PyCharm . Próbowałem ponownie zainstalować, a następnie zainstalować lub unieważnić pamięć podręczną i uruchomić ponownie PyCharm, ale nadal nie działa.

Potem wpadłem na to rozwiązanie, które działa idealnie dla mnie.

  1. Otwórz Project Interpreter przez Ctrl + Alt + S (Windows), a następnie kliknij Zainstaluj (+) nowy pakiet.

wprowadź opis zdjęcia tutaj

  1. Wpisz pakiet, który nie został rozwiązany przez PyCharm, a następnie kliknij Zainstaluj pakiet . Następnie kliknij OK .

wprowadź opis zdjęcia tutaj

Teraz zobaczysz, że Twoja biblioteka została rozwiązana.

Hien Quang Le
źródło
-1

Czy używasz virtualenv?

jeśli tak, musisz powiadomić PyCharm o każdej zmianie lokalizacji żądanego pliku python.exe (tylko ./activate nie wystarczy dla PyCharm)

Upewnij się, że Pycharm wskazuje prawidłowy interpetor i pakiety: Plik -> Ustawienia -> Projekt -> Projekt tłumacza. Kliknij koło zębate i wybierz python.exe w folderze skryptów virtualenv

wprowadź opis zdjęcia tutaj

Bar Horing
źródło