PyDev“가져 오기에서 정의되지 않은 변수”오류를 어떻게 수정합니까?


138

Eclipse에서 PyDev를 사용하는 Python 프로젝트가 있고 PyDev는 내 코드에 계속 잘못된 오류를 생성합니다. 객체 settings를 정의 하는 모듈 이 settings있습니다. 나는 그것을 모듈로 가져오고 다음을 사용 b하여 속성을 할당합니다.

from settings import settings
settings.main = object()

내 코드 중 일부에서는 다음과 같은 문장이 있습니다.

from settings import settings
print settings.main 

... 코드가 문제없이 실행 되더라도 Eclipse 코드 오류 분할 창에서 "import : main에서 정의되지 않은 변수"메시지를 생성하십시오. 이 문제를 어떻게 해결할 수 있습니까?


나는이 답변에서 pylint와 관련된 것을 보지 못했습니다.
ThorSummoner 2018

답변:


156

프로젝트의 코드의 경우 유일한 방법은 if False 실행되지 않도록 (정적 코드 분석은 런타임 정보가 아닌 보이는 정보 만 볼 수 있음) 해당 모듈을 직접 열면 main이 예상되었다는 표시가 없습니다).

이를 극복하기 위해 몇 가지 선택이 있습니다.

  1. 외부 모듈 인 경우 forced builtinsPyDev가 런타임 정보를 얻기 위해 쉘을 생성하도록 모듈을 추가 할 수 있습니다 (자세한 내용은 http://pydev.org/manual_101_interpreter.html 참조). 모듈을 쉘로 가져오고 모듈에서 찾은 클래스 dir(module)dir클래스를 수행하여 완료를 제시하고 코드를 분석하십시오.

  2. 오류가있는 줄에 Ctrl + 1 (Mac의 경우 Cmd + 1)을 사용할 수 있으며 PyDev는 해당 오류를 무시하기 위해 주석을 추가하는 옵션을 제공합니다.

  3. stub모듈 을 만들어 predefined완성에 추가 할 수 있습니다 ( http://pydev.org/manual_101_interpreter.html 에 자세한 내용이 있음).


1
때로는하지 도움 (예를 들어,이 버그를 볼 않는 강제 내장 명령에 모듈을 추가 sourceforge.net/tracker/... )
보리스 Gorelik

@Fabio : 여기에서 미리 정의 된 완료를 사용할 수 있습니까? 그리고 당신이 뭔가 try: import a; except: a=mockModule를하면 주석없이 이것을 억제 할 수있는 방법이 있습니까?
ted

8
Ctrl-1을 사용하여 주석을 추가하고 작동하는 '@UndefinedVariable'을 제공합니다. 감사.
RichMeister

최신 Eclipse 및 PyDev에서 동일한 문제가 발생합니다. 모든 모듈을 탐색 할 수 있는데 왜 코드 분석이 동일하지 않습니까?
Adam

3
극단적으로 가기 전에 디렉토리가 PYTHONPATH에 있는지 확인한 다음 Eclipse를 종료 / 다시 시작하고 Project> Pydev> 오류 마커 제거를 수행하면 numpy가 Forced 내장에 표시됩니다.
smci

49

바이너리 등에 의존하는 opencv를 사용하고 있으므로 다른 모든 줄 에이 바보 같은 오류가있는 스크립트가 있습니다. 파이썬은 동적 인 언어이므로 그러한 경우를 오류로 간주해서는 안됩니다.

다음으로 이동하여 이러한 오류를 모두 제거했습니다.

창-> 환경 설정-> PyDev-> 편집기-> 코드 분석-> 정의되지 않음-> 가져 오기에서 정의되지 않은 변수-> 무시

그게 다야.

창-> 환경 설정-> PyDev-> 편집기-> 코드 분석-> 가져 오기-> 가져 오기를 찾을 수 없음-> 무시


8
고마워 간단하고 쉽습니다. 그러나 "가져 오기를 가져올 수 없음"설정을 "무시"로 변경하는 대신 "경고"로 변경했습니다. 이제 아무 것도 나타나지 않습니다. :) 실제 수입 문제가 있으면 경고 메시지가 나타납니다.
사랑과 평화-Joe Codeswell

1
변경 사항을 적용하려면 Eclipse를 다시 시작해야합니다.
spettekaka

21

답변으로 표시된 게시물은 해결책이 아니라 해결 방법을 제공합니다.

이 솔루션은 저에게 효과적입니다.

  • 이동 Window - Preferences - PyDev - Interpreters - Python Interpreter
  • Forced builtins탭으로 이동
  • 클릭 New...
  • 모듈 이름을 입력하고 ( multiprocessing필자의 경우)OK

오류 메시지가 사라질뿐만 아니라 모듈 멤버도 인식됩니다.


1
"답변으로 표시된 게시물"이 PyDev의 개발자에 의해 작성되었다는 것을 고려할 때, 아마도 다시 살펴 봐야합니다. 사용자가 지정한 지침에 연결되어 있기 때문에 게시물 자체에 명시적인 지침을 제공하지 않습니다.
coredumperror

5
@CoreDumpError 게시물을 작성한 사람은 신경 쓰지 않습니다. 게시물에 설명 된 것을 시도했지만 작동하지만 해결책이 아닙니다. 내가 설명 한 것은 다른 컴퓨터에서는 작동하지 않을 수 있지만 나에게는 효과적이며 올바른 해결책입니다. 다른 게시물이 솔루션을 설명하는 대신 솔루션으로 연결하는 경우 지침을 따르지 않으면 다른 사람에게 도움이되기를 바라면서 나에게 좋은 솔루션이 무엇인지 설명하여 지침을 따랐습니다.
stenci

2
@Isaac 이제는 편집하기 전에 답변을 게시했습니다.
stenci

예, 이것은 훨씬 더 좋고 깨끗한 솔루션입니다! 숨기거나 숨기는 대신 합법적 인 수정을 제공합니다. 추가해야 re했지만 한 번은 더 이상 빨간 잉크를 사용하지 않았습니다.re.M
Bostone

10

Eclipse / PyDev 프로젝트에서 비슷한 문제가 발생했습니다. 이 프로젝트에서 파이썬 코드의 루트 디렉토리는 프로젝트의 하위 디렉토리였습니다.

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

프로젝트가 디버깅되거나 실행될 때 작업 디렉토리가 올바른 위치로 설정되어 모든 것이 정상이었습니다. 그러나 PyDev 코드 분석에서 module1 또는 module2에서 가져 오기를 찾지 못했습니다.

해결책은 프로젝트 속성-> PyDev-PYTHONPATH 섹션을 편집하고 소스 폴더 탭에서 / MyProject를 제거하고 대신 / MyProject / src를 추가하는 것입니다.


실제로 이것이 완벽하게 작동하는지 확인하고 싶었습니다.
Amndeep7

그러나 간단하게 메인 메뉴 Project / Properties / PyDev-PYTHONPATH로 이동하여 앱에 필요한 모든 경로를 추가하여 문제를 해결했습니다!
Kostyantyn

6

이것은 나를 위해 일했다 :

1 단계) 인터프리터를 제거하고 자동으로 다시 구성

2 단계) 창-환경 설정-PyDev-통역사-Python 통역사 강제 내장 탭으로 이동 새로 만들기를 클릭하십시오 ... 모듈의 이름 (제 경우에는 저주)을 입력하고 확인을 클릭하십시오

단계 3) 오류가 발생한 모듈에서 프로젝트 탐색기를 마우스 오른쪽 버튼으로 클릭하십시오. PyDev-> 코드 분석으로 이동하십시오.


현재 허용 된 답변보다 각 단계를보다 명확하게 만들어 주셔서 감사합니다.
sc28

1

나는 같은 문제가 있었다. Windows에서 Python 및 Eclipse를 사용하고 있습니다. 코드는 정상적으로 실행되었지만 일식은 어디에서나 오류를 보여줍니다. 폴더 'Lib'의 이름을 'lib'(C : \ Python27 \ lib)로 변경 한 후 문제가 해결되었습니다. 글자의 대문자가 구성 파일의 대문자와 일치하지 않으면 문제가 발생할 수 있습니다 (그러나 항상 문제는 아닙니다. 오류 검사가 갑자기 나타나지 않았기 때문에 오랜 시간 동안 오류 검사가 좋았 기 때문에 이유).


4
이것은 이클립스가 가장 좋아하는 취미입니다. 이유없이 갑자기 오류 플래그를 표시합니다. 이클립스가 갑자기 재미와 이익을 위해 무작위로 구현하기로 결정한 일부 엉뚱한 오류 플래그를 제외하고는 사람들이 세상을 깨뜨렸다는 생각을 미치게합니다.
R Thiede

나는 이것을 시도하고 그것이 효과가 있다고 생각했지만 그것은 단지 무례 했지만 5 분 이상 걸렸으므로 취소 할 수 없었다. 그러나 @ Fabio Zadrozny ctrl-1 @UndefinedVariable은 완벽하게 작동했으며 5 분 후에도 계속 작동합니다!
Mark Mikofski

1

내가하고있는 것에 대한 근사치 :

import module.submodule

class MyClass:
    constant = submodule.constant

pylint가 말한 내용 : E: 4,15: Undefined variable 'submodule' (undefined-variable)

가져 오기를 다음과 같이 변경하여이 문제를 해결했습니다.

from module.submodule import CONSTANT

class MyClass:
    constant = CONSTANT

참고 : 또한 가져온 변수로 이름을 변경하여 상수 특성을 반영하는 대문자 이름을 갖습니다.


0

Eclipse 내에서 파이썬 경로를 재구성해야 할 수도 있습니다. 비슷한 질문에 대한 내 답변 을 참조하십시오 .


0

환경 설정에서-> PyDev-> PyLint 인수 아래 PyLint에 전달하려면 다음 행을 추가하십시오.

--generated-members=objects

생성 된 각각에 대해이 작업을 수행해야합니다. 인터넷 검색으로 이것을 찾았지만 참조를 잃어 버렸습니다.


0

오류가 발생한 모듈에서 프로젝트 탐색기를 마우스 오른쪽 버튼으로 클릭하십시오. PyDev-> 오류 마커 제거로 이동하십시오.


0

내 대답은 새로운 것에 기여하지 않으며 내가 만난 구체적인 예입니다.

import gtk.gdk

w = gtk.gdk.get_default_root_window()

PyDev는 "가져 오기에서 정의되지 않은 변수 : get_default_root_window ()"오류 메시지를 표시했습니다

파이썬 셸에서 위의 답변에서 언급 한 것처럼 '내장'모듈임을 알 수 있습니다.

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

이제 Window-> Preferences-> PyDev-> Interpreters-> Python Interpreter에서 'Forced Builtins'탭을 선택하고 'gtk.gdk'를 목록에 추가했습니다.

이제 오류 메시지가 더 이상 표시되지 않았습니다.


0

이 두 단계가 항상 저에게 효과적이라는 것을 알았습니다.

  1. PYTHONPATH에 모듈의 상위 폴더를 확인 (또는 추가)하십시오.
  2. 강제 내장에 모듈의 전체 이름을 추가하십시오.

여기에 유의해야 할 사항 :

  • 일부 인기있는 모듈은 이름이 같은 일부 부모 및 자식 쌍으로 설치됩니다. 이 경우 다른 모든 항목에 대해 이미 확인 / 추가 한 조부모 폴더와 함께 해당 부모를 PYTHONPATH에 추가해야합니다.

  • 강제 내장에 추가 할 때 "예 :"google.appengine.api.memcache "를 사용하십시오.이 예에서"google "은 PYTHONPATH에 정의 된 폴더의 바로 하위입니다.


강제 내장 에 lib.site-packages._pytest 를 추가하는 방법 ... '-'기호를 허용하지 않습니다 ... 구성 모듈에 가져 오기 문제가 있고 구제 조치를 시도하고 있습니다. 도와주세요
zeal

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.