“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) 에서 실행을 시작할 때 흔히 발생하는 문제 입니다. 패키지를 단순히 외부에서 가져 오면 모든 것이 작동합니다.