728x90
ImportError: attempted relative import with no known parent package
오류는 상대 경로 import를 시도했으나, 해당 스크립트가 패키지의 일부로 인식되지 않을 때 발생합니다. 이 오류는 주로 패키지 외부에서 직접 하위 모듈을 실행하거나, __main__ 모듈로 실행할 경우 발생합니다.
상대 import는 현재 모듈의 위치를 기준으로 경로를 계산하기 때문에, 상위 패키지의 문맥이 없으면 상대 경로를 해석할 수 없어 오류가 발생합니다. 즉, from .module import something
과 같은 문법은 모듈이 패키지 내부에서 실행될 때만 유효합니다.
● 오류 발생 예시
# project/module1.py
from .utils import helper
위 코드를 python module1.py
로 직접 실행하면 부모 패키지가 없기 때문에 오류가 발생합니다.
ImportError: attempted relative import with no known parent package
● 해결 방법
- 프로젝트 루트에서 전체 패키지 구조로 실행:
python -m package.module1
- 상대 import 대신 절대 import 사용:
from package.utils import helper
- 실행 전 sys.path에 루트 경로 추가하거나 PYTHONPATH 설정
● 예시 코드 수정
# 상대 import → 절대 import로 수정
from .utils import helper # 상대 경로 (문제 발생)
from package.utils import helper # 절대 경로 (권장)
● 자주 하는 실수
- 직접 실행 시 상대 import 사용
- __init__.py 없는 구조에서 상대 import 시도
- 상위 패키지 없이 하위 모듈만 독립 실행
● 결론
ImportError - attempted relative import with no known parent package
오류는 상대 import 사용 시 실행 환경이 패키지로 인식되지 않을 경우 발생합니다. 절대 import 사용을 권장하며, 반드시 패키지 구조 내에서 실행되도록 구성해야 합니다.
728x90