developer tip

ImportError : 이름이 지정된 모듈 없음-Python

copycodes 2020. 11. 15. 11:27
반응형

ImportError : 이름이 지정된 모듈 없음-Python


다음 디렉터리 구조를 가진 Python 응용 프로그램이 있습니다.

src
 |
 +---- main
 |
 +---- util
 |
 +---- gen_py
         |
         +---- lib

main 패키지에는 다음 과 같은 import 문이있는 MyServer.py 라는 파이썬 모듈 이 있습니다.

from gen_py.lib import MyService

이 문이 작동하기 위해 MyServer.py 시작 부분에 다음 줄을 배치했습니다 .

import sys
sys.path.append('../gen_py/lib')

터미널에서 MyServer.py를 실행하면 다음 오류가 발생합니다.

ImportError : gen_py.lib라는 모듈이 없습니다.

내가 여기서 무엇을 놓치고 있습니까?


의 수정은 sys.path현재 작업 디렉토리가 항상 main/. 그렇지 않다. 대신에 상위 디렉토리를 sys.path다음에 추가하십시오 .

import sys
import os.path

sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
import gen_py.lib

__init__.pygen_py 및 lib에 파일을 포함하는 것을 잊지 마십시오. 그렇지 않으면 Python 모듈로 인식되지 않습니다.


Python 모듈 가져 오기가 작동하려면 경로에 "gen_py / lib"가 아닌 "src"가 있어야합니다.

가져 오기를 처리 할 때 import gen_py.lib모듈 gen_py을 찾은 다음 하위 모듈을 찾습니다 lib.

모듈 gen_py이 "../ gen_py / lib"( ".."에있을 것임)에 없기 때문에 추가 한 경로는 가져 오기 프로세스에 도움이되지 않습니다.

실행중인 위치에 따라 "src"폴더에 상대 경로를 추가해보십시오. 아마도 sys.path.append('..'). 다음과 같은 상대 경로를 통해 src 폴더 내부에서 직접 스크립트 실행에 성공할 수도 있습니다.python main/MyServer.py


from ..gen_py.lib import MyService

또는

from main.gen_py.lib import MyService

__init__.py각 디렉토리에 (적어도 비어있는) 파일 이 있는지 확인하십시오 .


포함해야합니다 __init__.py. 그러면 Python이 해당 디렉토리에 패키지 가 포함 되어 있음을 알 수 있습니다.


이것은 패키지를 빌드하고 가져 오기에서 오류를 발견하는 경우입니다. 나는 그것을 어려운 방법으로 배웠습니다. 대답은 패키지를 파이썬 경로에 추가하거나 프로그래밍 방식으로 수행하는 것이 아닙니다 (모듈이 설치되고 명령이 다시 추가하면 어떨까요?).

올바른 방법은 1) virtualenv pyvenv-3.4 또는 이와 유사한 것을 사용하는 것입니다. 2) 개발 모드 활성화-$ python setup.py develop


루트 프로젝트 디렉토리가 sys.path 출력에 표시되는지 확인하십시오. 그렇지 않은 경우 루트 프로젝트 디렉토리의 경로를 sys.path에 추가하십시오.

참고 URL : https://stackoverflow.com/questions/7587457/importerror-no-module-named-python

반응형