“ModuleNotFoundError :… '__ main__'is not a package”오류 해결
Nov 13 2020
구조를 가진 서버에서 실행되는 프로젝트가 있습니다.
proj
__init__.py
module_a.py
module_b.py
main.py
그리고 main.py의 헤더에서 다른 모듈에서 형식을 가져옵니다.
from .module_a import func1
from .module_b import func2
이것은 서버에서 잘 실행되지만 로컬 컴퓨터에서 테스트 할 때 오류가 발생합니다.
ModuleNotFoundError: No module named '__main__.module_a'; '__main__' is not a package
이 오류와 관련하여 많은 질문이 제기되었으며 허용되는 해결책은 거의 항상 import 문을 다음으로 대체하는 것입니다.
from proj.module_a import func1
코드가 로컬로 실행되는지 원격으로 실행되는지에 따라 완전히 다른 import 문 집합을 사용하지 않고도 이러한 유형의 구문을 허용하도록 로컬 환경을 구성 할 수있는 방법이 있습니까?
답변
1 progmatico Nov 16 2020 at 22:21
패키지 전체 경로를 사용하지 않고 가져 오기를 상대적으로 유지하여 다음과 같이 원하는대로 이름을 유연하게 변경할 수 있습니다.
from .module_a import func1
그런 다음 로컬 환경에서 현재 디렉토리를 proj
상위 폴더로 변경하고 다음을 실행하십시오.
python -m proj.main
대안은로 이름 main.py
을 바꾼 __main__.py
다음 작성하는 것입니다.
python -m proj
할 것입니다. 그러나 파일을 그대로 복사하면 서버의 동작에 영향을 미칠 수 있습니다.
일반적으로 패키지를 가져옵니다. 이것은 패키지 내부에있는 임의의 스크립트 (이 경우 main.py
) 에서 실행을 시작할 때 흔히 발생하는 문제 입니다. 패키지를 단순히 외부에서 가져 오면 모든 것이 작동합니다.