Jak naprawić błędy PyDev "Undefined variable from import"?

Mam projekt Pythona wykorzystujący PyDev w Eclipse, a PyDev ciągle generuje fałszywe błędy dla mojego kodu. Mam Moduł settings, który definiuje obiekt settings. Importuję to w module b i przypisuję atrybut z:

from settings import settings
settings.main = object()

W niektórych moich kodach -- ale nie wszystkich, wypowiedzi takie jak:

from settings import settings
print settings.main 

... generowanie wiadomości "Undefined variable from import: main" w panelu błędu kodu Eclipse, mimo że kod działa bez problemu. Jak mogę je poprawić?

Author: Chris B., 2010-01-21

12 answers

Dla kodu w Twoim projekcie, jedynym sposobem jest dodanie deklaracji mówiącej, że spodziewałeś się, że -- prawdopodobnie chroniony przez if False, aby nie działał (statyczna analiza kodu widzi tylko to, co widzisz, a nie informacje o uruchomieniu -- gdybyś sam otworzył ten moduł, nie miałbyś żadnych wskazań, że main był oczekiwany).

Aby to przezwyciężyć, są pewne wybory:

  1. Jeśli jest to jakiś zewnętrzny moduł, można go dodać do forced builtins, aby PyDev wywołał dla niego powłokę aby uzyskać informacje o uruchomieniu (zobacz http://pydev.org/manual_101_interpreter.html dla szczegółów) -- tzn.: głównie PyDev zaimportuje moduł do powłoki i wykona dir(module) i dir na klasach znalezionych w module, aby przedstawić Uzupełnienia i dokonać analizy kodu.

  2. Możesz użyć Ctrl+1 (Cmd+1 dla komputerów Mac) w wierszu z błędem, a PyDev wyświetli Ci opcję dodania komentarza, aby zignorować ten błąd.

  3. Możliwe jest utworzenie stub modułu i dodanie go do predefined ( http://pydev.org/manual_101_interpreter.html ma również szczegóły na ten temat).

 147
Author: Fabio Zadrozny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-23 15:27:29

Używam opencv który opiera się na binariach itp Więc mam Skrypty gdzie co druga linia ma ten głupi błąd. Python jest językiem dynamicznym, więc takie okazje nie powinny być uważane za błędy.

Usunąłem te błędy całkowicie przechodząc do:

Window -> Preferences -> PyDev - > Editor -> Code Analysis -> Undefined -> Undefined Variable From Import - > Ignore

I tyle.

Może być również, Okno - > Preferencje - > PyDev - > Edytor - > Analiza Kodu - > Import - > Import not found - > Ignore

 46
Author: ubershmekel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-02 15:26:09

Post oznaczony jako odpowiedź daje obejście, a nie rozwiązanie.

To rozwiązanie działa dla mnie:

  • przejdź do Window - Preferences - PyDev - Interpreters - Python Interpreter
  • przejdź do zakładki Forced builtins
  • Kliknij na New...
  • Wpisz nazwę modułu (multiprocessing w moim przypadku) i kliknij OK

Nie tylko komunikaty o błędach znikną, ale również członkowie modułu zostaną rozpoznani.

 13
Author: stenci,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-21 18:43:36

Miałem podobny problem z projektem Eclipse / PyDev. W tym projekcie główny katalog kodu Pythona był podkatalogiem projektu.

--> MyProject
 + --> src         Root of python code
   + --> module1     A module 
   + --> module2     Another module
 + --> docs
 + --> test

Kiedy projekt był debugowany lub uruchamiany wszystko było w porządku, ponieważ katalog roboczy został ustawiony we właściwym miejscu. Jednakże Analiza kodu PyDev nie wykazała żadnego przywozu z module1 lub module2.

Rozwiązaniem było edytowanie sekcji properties projektu - > PyDev-PYTHONPATH i usunięcie / MyProject z zakładka foldery źródłowe i dodaj do niej /MyProject/src.

 7
Author: Jules,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-16 13:05:48

To mi się udało:

Krok 1) Usunięcie interpretera, automatyczne skonfigurowanie go ponownie

Krok 2) Window - Preferences - PyDev-Interpreters - Python Interpreter Przejdź do zakładki Forced builtins Kliknij na nowy... Wpisz nazwę modułu (w moim przypadku przekleństwa) i kliknij OK

Krok 3) Kliknij prawym przyciskiem myszy w Eksploratorze projektu na dowolnym module, który podaje błędy. Przejdź do PyDev- > Analiza kodu.

 4
Author: SJP,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-19 15:45:09

Miałem ten sam problem. Używam Pythona i Eclipse na Windows. Kod działał dobrze, ale eclipse pokazuje błędy wszędzie. Po zmianie nazwy folderu " Lib " na " lib " (C:\Python27\lib), problem został rozwiązany. Wydaje się, że jeśli wielkie litery nie pasują do tych w pliku konfiguracyjnym, czasami Będzie to powodować problemy (ale wydaje się, że nie zawsze, ponieważ sprawdzanie błędów było w porządku przez długi czas, zanim problemy nagle pojawiły się dla no oczywisty powód).

 1
Author: Leon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-30 08:52:31

Przybliżenie tego, co robiłem:

import module.submodule

class MyClass:
    constant = submodule.constant

Do którego pylint powiedział: E: 4,15: Undefined variable 'submodule' (undefined-variable)

Rozwiązałem to zmieniając mój import jak:

from module.submodule import CONSTANT

class MyClass:
    constant = CONSTANT

uwaga: zmieniłem również nazwę importowanej zmiennej, aby miała nazwę z wielkich liter, aby odzwierciedlić jej stałą naturę.

 1
Author: ThorSummoner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-01 22:53:35

Jest możliwe, że po prostu musisz ponownie skonfigurować ścieżkę Pythona w Eclipse. Zobacz moją ODPOWIEDŹ na podobne pytanie.

 0
Author: oob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:12

W preferencjach -- > PyDev -- > PyLint pod argumentami do przekazania do PyLint Dodaj tę linię:

--generated-members=objects

Będziesz musiał to zrobić dla każdego wygenerowanego . Znalazłem to przez googlowanie, ale zgubiłem odniesienie.

 0
Author: Mark Mikofski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-07 09:12:38

Kliknij prawym przyciskiem myszy w Eksploratorze projektu na dowolnym module, który podaje błędy. Przejdź do PyDev- > usuń znaczniki błędów.

 0
Author: Chet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-14 03:30:00

Moja odpowiedź nie wnosi nic nowego, tylko konkretny przykład, z którym się spotkałem.

import gtk.gdk

w = gtk.gdk.get_default_root_window()

PyDev pokazał komunikat o błędzie "Undefined variable from import: get_default_root_window ()"

W powłoce Pythona widać, że jest to' wbudowany ' Moduł, jak wspomniano w odpowiedzi powyżej:

>>> import gtk.gdk
>>> gtk.gdk
<module 'gtk.gdk' (built-in)>

Teraz pod Window - > Preferences->PyDev->Interpreters- > Python Interpreter wybrałem zakładkę 'Forced Builtins' i dodałem 'gtk.gdk " do listy.

Teraz komunikat o błędzie nie był już wyświetlany.

 0
Author: chrimuelle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-23 16:47:02

Uważam, że te 2 kroki działają dla mnie cały czas:

  1. Potwierdź (else Dodaj) folder nadrzędny modułu do ścieżki PYTHONPATH.
  2. Dodaj pełną nazwę modułu do forced builtins.

Rzeczy do odnotowania tutaj:

  • Niektóre popularne moduły instalują się z parą rodzica i dziecka o tej samej nazwie. W takich przypadkach musisz również dodać tego rodzica do PYTHONPATH, oprócz jego folderu, który już potwierdziłeś/dodałeś dla Wszystko inne.

  • Użyj (na przykład) "google.appengine.api.memcache "podczas dodawania do forced builtins, nie tylko "memcache", gdzie "google" w tym przykładzie jest bezpośrednim potomkiem folderu zdefiniowanego w PYTHONPATH.

 0
Author: Aikude,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-04 11:28:30