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.