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__.py
gen_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
'developer tip' 카테고리의 다른 글
결과를 오늘 날짜와 비교 하시겠습니까? (0) | 2020.11.16 |
---|---|
MongoDB는 배열을 어떻게 색인합니까? (0) | 2020.11.15 |
"authenticate_user!"의 구현은 어디에 있습니까? (0) | 2020.11.15 |
부모 div 자동 크기를 자식 div의 너비로 만드는 방법 (0) | 2020.11.15 |
Microsoft.AspNet.Identity.EntityFramework.IdentityUser에서 ID 유형을 변경하는 방법 (0) | 2020.11.15 |