Nierozwiązane problemy z importem w PyDev i Eclipse


108

Jestem bardzo nowy w PyDev i Pythonie, chociaż często używałem Eclipse dla Javy. Próbuję przepracować kilka przykładów Dive Into Python i wydaje mi się, że jest to niezwykle trywialny problem, który staje się niezwykle irytujący. Używam Ubuntu Linux 10.04.

Chcę móc korzystać z pliku odbchelper.py, który znajduje się w katalogu /Desktop/Python_Tutorials/diveintopython/py

Oto mój plik example.py, nad którym pracuję w moim projekcie PyDev / Eclipse:

import sys
sys.path.append("~/Desktop/Python_Tutorials/diveintopython/py")

Działa to dobrze, ale chcę, aby następna linia mojego kodu wyglądała następująco:

import odbchelper

a to powoduje za każdym razem nierozwiązany błąd importu. Dodałem __init__.pypliki do prawie każdego możliwego katalogu i nic to nie pomaga. Próbowałem dodawać __init__.pypliki pojedynczo do różnych poziomów katalogów między lokalizacją projektu a plikiem odbchelper.py, a także próbowałem dodawać __init__.pypliki do wszystkich katalogów jednocześnie. Ani jedno, ani drugie nie działa.

Chcę tylko mieć projekt gdzieś w jakimś innym katalogu, powiedzmy /Desktop/MyStuff/Project, w którym mam example.py ... a następnie z example.py chcę zaimportować odbchelper.py z/Desktop/Python_Tutorials/diveintopython/py/

Każda odpowiedź na forum dyskusyjnym, którą mogę znaleźć, po prostu mówi, aby użyć sys.path.append()funkcji, aby dodać ten katalog do mojej ścieżki, a następnie zaimportować go ... ale to jest dokładnie to, co robię w moim kodzie i nie działa.

Próbowałem też Ctrl- 1triku, aby ukryć komunikat o błędzie, ale program nadal nie działa poprawnie. I pojawia się błąd, ImportError: No module named odbchelper. Więc najwyraźniej nie dodaje się ścieżki lub jest problem, który __init__.pyzostał pominięty we wszystkich moich wielu kombinacjach dodawania plików.

To bardzo frustrujące, że coś tak prostego ... wywoływanie rzeczy z jakiegoś pliku, który istnieje gdzie indziej na moim komputerze ... wymaga tak dużego wysiłku.


Upewnij się, że wielkość liter (wielkie litery) są poprawne dla wszystkich niezbędnych katalogów w PYTHONPATH.
— Cam Jackson,

Wiem, że na to już udzielono odpowiedzi, ale otrzymywałem nierozwiązany import grpmodułu. Właśnie dodałem go do builtinslisty w Preferencje> PyDev> Interpreters> Python> Forced Builtins i nadal otrzymuję autouzupełnianie dla tego modułu
— user1040495

Odpowiedzi:


132

We właściwościach projektu pydev znajduje się panel o nazwie „PyDev - PYTHONPATH” z okienkiem podrzędnym o nazwie „Biblioteki zewnętrzne”. Możesz dodać foldery źródłowe (dowolny folder, który ma __init__.py) do ścieżki za pomocą tego panelu. Twój kod projektu będzie wtedy mógł importować moduły z tych folderów źródłowych.


4
Jeśli poprawnie ustawisz właściwości pydev, nie musisz się bawićsys.path
— Velociraptors

6
Dla innych poszukiwaczy chciałem dodać swoje doświadczenie - Windows 7, Python 2.7.1, Eclipse 3.6.2, PyDev, Pyschopg (dla Pythona 2.7 amd64). Instalacja Psychopg trafiła do C: \ Python27 \ Lib \ site-packages \ psycopg2 (w ramach instalacji Pythona 2.7). Najpierw odwołałem się do tego folderu i wszystkich folderów podrzędnych za pomocą init .py, ale stwierdziłem, że muszę również odwołać się do folderu site_packages. ( stackoverflow.com/questions/2983088/unresolved-import-models ) ( stackoverflow.com/questions/4631377/… )
— Jeff Maass

86
Jeszcze jedna uwaga - aby to zadziałało, może być konieczne ponowne uruchomienie Eclipse. Wydaje się, że działa to tylko przez „Plik -> Uruchom ponownie”, a nie przez ręczne zamykanie i ponowne otwieranie.
— soulBit

18
Ważna uwaga: Odkryłam, że interpreter Auto Config dodaje C:\Python27\lib\site-packages, ale na moim komputerze folder lib są aktywowane: C:\Python27\Lib\site-packages. Zastąpienie wpisu z małej litery na dużą, a następnie Plik-> Uruchom ponownie rozwiązało problem za mnie. Mam nadzieję, że pomoże to komuś innemu :)
— Cam Jackson

10
@soulBit Chciałbym móc kciukować ten komentarz 20 razy. Spędziłem dobrą godzinę próbując dowiedzieć się, dlaczego mój import nadal nie został rozwiązany. Dziękuję
— Matt Dodge

51

Używam eclipse kepler 4.3, PyDev 3.9.2 i na moim ubuntu 14.04 napotkałem ten sam problem. Próbowałem i spędziłem wiele godzin, korzystając ze wszystkich powyższych opcji, ale na próżno. Potem wypróbowałem następujące, co było świetne:

  • Wybierz Projekt -> RightClick-> PyDev -> Usuń konfigurację projektu PyDev
  • plik-> restart

I używałem Pythona 2.7 jako interpretera, chociaż myślę, że to nie ma wpływu.


5
Nie ma potrzeby ponownego uruchamiania Eclipse, wystarczy zamknąć i ponownie otworzyć plik. Działa również w systemie Windows z Eclipse Luna, dzięki!
— Noam Manos

Musiałem dwa razy ponownie uruchomić Eclipse, aby ostrzeżenia zniknęły. Dziękuję
— Vladimir S.

Działa również z Pythonem 3.7. To powinno być rozwiązanie tego pytania.
— SPRBRN

Próbowałem tego i teraz nie mogę uruchomić mojego serwera DEV. Jak zamienić plik?
— Lee Loftiss

@ BitByty-Bake Jaka jest główna przyczyna?
— ankostis

42

Właśnie zaktualizowałem projekt WXWindows do Pythona 2.7 i nie miałem żadnych problemów ze skłonieniem Pydeva do rozpoznania nowego interpretera. Zrobiłem to samo, co powyżej, konfigurując interpreter, wykonałem nową instalację Eclipse i Pydev. Pomyślałem, że jakaś część Pythona musiała być uszkodzona, więc ponownie zainstalowałem wszystko. Arghh! Zamknięcie i ponowne otwarcie projektu oraz ponowne uruchomienie Eclipse pomiędzy wszystkimi tymi zmianami.

W KOŃCU zauważyłem, że możesz „usunąć konfigurację projektu PyDev”, klikając projekt prawym przyciskiem myszy. Następnie można go ponownie przekształcić w projekt PyDev, teraz jest dobry jak złoto!


Tak, zamknąłem i ponownie otworzyłem projekt, aby pozbyć się niepokojących komunikatów ImportError
— somnathchakrabarti

17

Naprawiłem pythonpath i wszystko wyglądało elegancko, kiedy importowałem rzeczy przez konsolę, ale wszystkie te wcześniej nierozwiązane importy nadal były oznaczone jako błędy w moim kodzie, bez względu na to, ile razy restartowałem zaćmienie lub odświeżałem / czyściłem projekt.

Kliknąłem prawym przyciskiem myszy projekt-> Pydev-> Usuń znaczniki błędów i pozbyłem się tego problemu. Nie martw się, jeśli Twój kod zawiera rzeczywiste błędy, zostaną one ponownie zaznaczone.


Działa to dobrze, używając liclipse z odoo 10. Dzięki!
— Didierh

11

projekt -> właściwości -> pydev-pythonpath -> biblioteki zewnętrzne -> dodaj folder źródłowy, dodaj FOLDER NADRZĘDNY projektu. Następnie uruchom ponownie zaćmienie.


2
Cóż, to był ten, który rozwiązał mój problem.
— Simon Hayward

Nie ma potrzeby ponownego uruchamiania, wystarczy zamknąć i ponownie otworzyć plik. Naprawiłem to dla mnie!
— Jerther

4

Oto, co zadziałało dla mnie (sugerowane przez soulBit):

1) Restart using restart from the file menu
2) Once it started again, manually close and open it.

To najprostsze rozwiązanie w historii, które całkowicie usuwa irytujące rzeczy.


1

Istnieją dwa sposoby rozwiązania tego problemu:

  • Usuń interpreter języka Python z „Interpreterów języka Python” i dodaj go ponownie.
  • Lub po prostu dodaj folder z bibliotekami do interpretera, którego używasz w swoim projekcie, w moim przypadku użyłem „butelki”, a dodany folder to „c: \ Python33 \ Lib \ site-packages \ bottle-0.11.6 -py3.3.egg ”

Teraz nie widzę już błędu, a funkcja uzupełniania kodu działa również z „butelką”.


1

Używam Eclipse 4.2.0 (Juno) i PyDev 2.8.1 i napotkałem ten problem z biblioteką zainstalowaną w mojej ścieżce pakietów witryny. Zgodnie z tym pytaniem SO:

Pliki Pydev i * .pyc

... występuje problem z plikami PyDev i pyc. W przypadku konkretnej biblioteki, do której próbowałem się odwołać, dostarczono tylko pliki pyc.

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

  1. Zainstaluj uncompyle2 z https://github.com/Mysterie/uncompyle2
  2. Uruchom uncompyle2 na plikach * .pyc w pakiecie witryny lib. Przykład:

    uncompyle2 -r -o / tmp / path / to / site-packages / lib

  3. Zmień nazwę wynikowych plików * .pyc_dis utworzonych z uncompyle2 na * .py
  4. Przenieś / skopiuj te pliki * .py do ścieżki pakietów lokacji
  5. W Eclipse wybierz Plik> Uruchom ponownie

Nierozwiązany błąd importu dotyczący plików .pyc powinien teraz zniknąć.


0

Moim zdaniem podążanie dalej rozwiąże problem

  1. Dodawanie pliku init .py do folderu „~ / Desktop / Python_Tutorials / diveintopython / py”
  2. Przejdź do Window -> Preferences -> PyDev -> Interpreters -> Python Interpreter, aby usunąć ustawienia Python Interpreter (powodem jest to, że PyDev nie może automatycznie odświeżyć żadnych aktualizacji wprowadzonych do żadnej systemowej ścieżki PythonPath)
  3. Dodaj Interpreter z tymi samymi szczegółami, co poprzednio (spowoduje to odświeżenie ustawienia interpretera Pythona z aktualizacjami dokonanymi w PythonPath)
  4. Wreszcie, ponieważ folder „~ / Desktop / Python_Tutorials / diveintopython / py” nie jest standardową ścieżką PythonPath, będziesz musiał go dodać. Istnieją dwa sposoby, aby to zrobić

za. Jak zasugerował David German. Jednak dotyczy to tylko określonych projektów, w których uczestniczysz. Dodaj "~ / Desktop / Python_Tutorials / diveintopython / py" do nowej PythonPath w Window -> Preferences -> PyDev -> Interpreters -> Python Interpreter -> Libraries -> NewFolder

Mam nadzieję, że to pomoże.


0

Miałem pewne problemy z importowaniem dodatkowych bibliotek, po próbie rozwiązania problemu, rozumiejąc PYTHONPATH, Interpreter i Grammar, stwierdziłem, że zrobiłem wszystko, co napisałem, ale problemy nadal występują. Następnie po prostu dodaję nową pustą linię w plikach, które zawierały błędy importu i zapisałem je, a błąd został rozwiązany .


-1
KD.py

class A:
a=10;

KD2.py 
from com.jbk.KD import A;
class B:
  b=120;

aa=A();
print(aa.a)

TO działa idealnie dla mnie

Innym przykładem jest

main.py
=======
from com.jbk.scenarios.objectcreation.settings import _init
from com.jbk.scenarios.objectcreation.subfile import stuff

_init();
stuff();

settings.py
==========
def _init():
print("kiran")


subfile.py
==========
def stuff():
print("asasas")    

Rozważ oddzielenie nazw plików i kodów. Musisz także poprawić niektóre wcięcia.
— dkato
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.