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.