PyDev 및 Eclipse에서 해결되지 않은 가져 오기 문제


108

Java 용 Eclipse를 많이 사용했지만 PyDev와 Python을 처음 접했습니다. 저는 Dive Into Python 예제 중 일부를 살펴 보려고 노력하고 있는데 이것은 매우 사소한 문제처럼 느껴져서 매우 성가 시게됩니다. Ubuntu Linux 10.04를 사용하고 있습니다.

디렉토리에있는 odbchelper.py 파일을 사용하고 싶습니다. /Desktop/Python_Tutorials/diveintopython/py

다음은 PyDev / Eclipse 프로젝트에서 작업중인 example.py 파일입니다.

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

이것은 잘 작동하지만 코드의 다음 줄은 다음과 같습니다.

import odbchelper

이로 인해 매번 해결되지 않은 가져 오기 오류가 발생합니다. __init__.py가능한 거의 모든 디렉토리에 파일을 추가 했지만 아무것도 도움이되지 않습니다. 나는 추가 해봤 __init__.py프로젝트 위치와 odbchelper.py 파일과 디렉토리의 다양한 수준에 한 번에 파일 하나를, 나는 또한 추가 해봤 __init__.py동시에 사이에있는 모든 디렉토리에 파일을. 둘 다 작동하지 않습니다.

내가하고 싶은 것은 다른 디렉토리에 프로젝트가 있습니다. 예를 들어 /Desktop/MyStuff/Projectexample.py ...가 있고 example.py에서 odbchelper.py를 가져오고 싶습니다./Desktop/Python_Tutorials/diveintopython/py/

내가 찾을 수있는 모든 메시지 보드 응답은 sys.path.append()이 디렉토리를 내 경로에 추가 한 다음 가져 오기 위해 함수 를 사용하라는 메시지를 찾을 수 있지만 정확히 내 코드에서 수행하는 작업이며 작동하지 않습니다.

나는 또한 오류 메시지를 억제하기 위해 Ctrl- 1트릭을 시도 했지만 프로그램이 여전히 올바르게 작동하지 않습니다. 오류가 발생 ImportError: No module named odbchelper합니다. 따라서 경로가 추가되지 않았거나 __init__.py파일 을 추가하는 많은 순열 이 놓친 문제가 있습니다.

내 컴퓨터의 다른 곳에 존재하는 어떤 파일에서 무언가를 호출하는이 간단한 일이 이렇게 많은 노력을 필요로한다는 것은 매우 실망 스럽습니다.


PYTHONPATH에서 필요한 모든 디렉토리에 대소 문자 (대문자)가 올바른지 확인하십시오.
Cam Jackson

이미 답변을 받았지만 grp모듈에 대해 해결되지 않은 가져 오기가 발생했습니다 . 방금 builtinsPreferences> PyDev> Interpreters> Python> Forced Builtins 의 목록에 추가했지만 여전히 해당 모듈에 대한 자동 완성 기능이 제공됩니다
user1040495 2014

답변:


132

pydev 프로젝트의 속성에는 "외부 라이브러리"라는 하위 창과 함께 "PyDev-PYTHONPATH"라는 창이 있습니다. __init__.py해당 창을 사용하여 경로 에 소스 폴더 (가있는 모든 폴더)를 추가 할 수 있습니다 . 그러면 프로젝트 코드가 해당 소스 폴더에서 모듈을 가져올 수 있습니다.


4
pydev 속성을 올바르게 설정하면 엉망이 될 필요가 없습니다sys.path
Velociraptors

6
다른 검색자를 위해 Windows 7, Python 2.7.1, Eclipse 3.6.2, PyDev, Pyschopg (Python 2.7 amd64 용)와 같은 경험을 추가하고 싶었습니다. Psychopg의 설치는 C : \ Python27 \ Lib \ site-packages \ psycopg2 (Python 2.7 설치 아래)로갔습니다. 처음에는 해당 폴더와 모든 하위 폴더를 init .py로 참조했지만 site_packages 폴더도 참조해야합니다. ( stackoverflow.com/questions/2983088/unresolved-import-models ) ( stackoverflow.com/questions/4631377/... )
제프 MAASS

86
주의해야 할 또 다른 사항-이 작업을 수행하려면 Eclipse를 다시 시작해야 할 수 있습니다. 이것은 수동으로 닫았다가 다시 열지 않고 "파일-> 다시 시작"을 통해서만 작동하는 것 같습니다.
soulBit

18
중요 참고 사항 : 인터프리터 자동 구성이를 추가 C:\Python27\lib\site-packages하지만 내 컴퓨터에서 lib 폴더는 대문자로 표시 C:\Python27\Lib\site-packages됩니다. 소문자 항목을 대문자 항목으로 바꾼 다음 File-> Restart로 문제가 해결되었습니다. 다른 누군가를 돕는 희망 :)
Cam Jackson

10
@soulBit 나는 그 댓글을 20 번이나 칭찬 할 수 있었으면 좋겠다. 왜 가져 오기가 아직 해결되지 않았는지 알아 내려고 좋은 시간을 보냈다. 주셔서 감사합니다
매트 다지에게

51

eclipse kepler 4.3, PyDev 3.9.2를 사용하고 있으며 우분투 14.04에서 동일한 문제가 발생했습니다. 위의 모든 옵션을 시도했지만 헛된 시간을 보냈습니다. 그런 다음 다음을 시도했습니다.

  • 선택 프로젝트 -> RightClick-> 를 PyDev -> 제거를 PyDev 프로젝트 구성
  • 파일-> 재시작

그리고 저는 파이썬 2.7을 인터프리터로 사용하고 있었지만 효과는 없었습니다.


5
Eclipse를 다시 시작할 필요없이 파일을 닫았다가 다시 엽니 다. Eclipse Luna와 함께 Windows에서도 작동했습니다. 감사합니다!
Noam Manos

경고가 사라지도록 Eclipse를 두 번 다시 시작해야했습니다. 주셔서 감사합니다
블라디미르 S.에게

Python 3.7에서도 작동합니다. 이것이이 질문에 대한 해결책이되어야합니다.
SPRBRN

나는 이것을 시도했지만 이제 DEV 서버를 시작할 수 없습니다. 파일을 어떻게 바꾸나요?
Lee Loftiss 2019 년

@ BitByty-Bake 근본 원인은 무엇입니까?
ankostis 19

42

방금 WXWindows 프로젝트를 Python 2.7로 업그레이드했으며 Pydev가 새 인터프리터를 인식하도록하는 데 아무런 문제가 없었습니다. 위의 인터프리터 구성과 동일한 작업을 수행하고 Eclipse 및 Pydev를 새로 설치했습니다. 파이썬의 일부가 손상되었을 것이라고 생각했기 때문에 모든 것을 다시 설치했습니다. 아아! 프로젝트를 닫았다가 다시 열고 이러한 모든 변경 사항 사이에 Eclipse를 다시 시작했습니다.

마지막으로 프로젝트를 마우스 오른쪽 버튼으로 클릭하여 'PyDev 프로젝트 구성을 제거'할 수 있음을 확인했습니다. 그런 다음 다시 PyDev 프로젝트로 만들 수 있습니다. 이제 금으로 좋습니다!


예를 폐쇄하고 방해 ImportError를 메시지를 제거하는 프로젝트를 재개
somnathchakrabarti

17

pythonpath를 고쳤고 콘솔을 통해 물건을 가져올 때 모든 것이 멋졌지만 이전에 해결되지 않은 모든 가져 오기는 몇 번이나 Eclipse를 다시 시작하거나 프로젝트를 새로 고치거나 정리하더라도 여전히 내 코드에서 오류로 표시되었습니다.

프로젝트-> Pydev-> 오류 마커 제거를 마우스 오른쪽 버튼으로 클릭하면 해당 문제가 제거되었습니다. 코드에 실제 오류가 포함되어 있으면 다시 표시되므로 걱정하지 마십시오.


이것은 odoo 10과 함께 liclipse를 사용하여 잘 작동합니다. 감사합니다!
Didierh

11

프로젝트-> 속성-> pydev-pythonpath-> 외부 라이브러리-> 소스 폴더 추가, 프로젝트의 PARENT FOLDER 추가. 그런 다음 이클립스를 다시 시작하십시오.


2
글쎄, 이것은 내 문제를 해결 한 것입니다.
시몬 헤이워드

다시 시작할 필요없이 파일을 닫고 다시 엽니 다. 나를 위해 고쳤습니다!
Jerther

4

다음은 나를 위해 일한 것입니다 (soulBit에서 요청).

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

이것은 가장 간단한 솔루션이며 성가신 일을 완전히 제거합니다.


1

이 문제를 해결하는 방법에는 두 가지가 있습니다.

  • "Python 인터프리터"에서 Python 인터프리터를 삭제하고 다시 추가하십시오.
  • 또는 프로젝트에서 사용중인 인터프리터의 라이브러리가있는 폴더를 추가하십시오. 제 경우에는 "bottle"을 사용하고 추가 한 폴더는 "c : \ Python33 \ Lib \ site-packages \ bottle-0.11.6"이었습니다. -py3.3.egg "

이제 더 이상 오류가 표시되지 않으며 코드 완성 기능은 "병"에서도 잘 작동합니다.


1

Eclipse 4.2.0 (Juno) 및 PyDev 2.8.1을 실행 중이며 내 사이트 패키지 경로에 설치된 lib로이 문제가 발생했습니다. 이 SO 질문에 따르면 :

Pydev 및 * .pyc 파일

... PyDev 및 pyc 파일에 문제가 있습니다. 내가 참조하려고 한 특정 lib의 경우 제공되는 모든 것은 pyc 파일입니다.

이 문제를 해결하기 위해 내가 한 작업은 다음과 같습니다.

  1. https://github.com/Mysterie/uncompyle2 에서 uncompyle2를 설치합니다.
  2. 사이트 패키지 lib의 * .pyc 파일에 대해 uncompyle2를 실행합니다. 예:

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

  3. uncompyle2에서 생성 된 결과 * .pyc_dis 파일의 이름을 * .py로 바꿉니다.
  4. 이 * .py 파일을 사이트 패키지 경로로 이동 / 복사합니다.
  5. Eclipse에서 파일> 다시 시작을 선택하십시오.

.pyc 파일과 관련된 해결되지 않은 가져 오기 오류가 이제 사라집니다.


0

다음으로 내 의견으로는 문제를 해결할 것입니다.

  1. 추가 중 초기화 하여 "~ / 데스크탑 / Python_Tutorials / diveintopython / 평"폴더 평을
  2. Window-> Preferences-> PyDev-> Interpreters-> Python Interpreter로 이동하여 Python Interpreter 설정을 제거합니다 (이유는 PyDev가 시스템 PythonPath에 대한 업데이트를 자동으로 새로 고칠 수 없기 때문입니다).
  3. 이전과 동일한 세부 정보로 인터프리터를 추가합니다 (이렇게하면 PythonPath에 대한 업데이트로 Python 인터프리터 설정이 새로 고쳐집니다).
  4. 마지막으로 "~ / Desktop / Python_Tutorials / diveintopython / py"폴더가 표준 PythonPath가 아니기 때문에 추가해야합니다. 두 가지 방법이 있습니다.

ㅏ. David German이 제안한대로. 그러나 이것은 당신이 속한 특정 프로젝트에만 적용됩니다. b. Window-> Preferences-> PyDev-> Interpreters-> Python Interpreter-> Libraries subtab-> NewFolder 아래의 새 PythonPath에 "~ / Desktop / Python_Tutorials / diveintopython / py"를 추가합니다.

도움이되기를 바랍니다.


0

PYTHONPATH, Interpreter 및 Grammar를 이해하여 문제를 해결하려고 시도한 후 추가 라이브러리를 가져 오는 데 몇 가지 문제가 있었지만 모든 것을 작성했지만 문제는 계속된다는 것을 알았습니다. 그 후 가져 오기 오류가있는 파일에 새 빈 줄을 추가하고 저장하고 오류가 해결되었습니다 .


-1
KD.py

class A:
a=10;

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

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

이것은 나를 위해 완벽하게 작동합니다.

또 다른 예는

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

파일 이름과 코드를 분리하는 것을 고려하십시오. 또한 일부 들여 쓰기를 수정해야합니다.
dkato
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.