728x90
ImportError: cannot import name 'module'
오류는 특정 모듈이나 객체를 import하려 할 때, 대상이 실제 해당 파일이나 패키지 내부에 존재하지 않을 경우 발생합니다. 이 오류는 일반적으로 from 모듈 import 이름
구문에서 이름
이 해당 모듈에 정의되어 있지 않거나, 순환 참조(Circular Import)가 발생한 경우에 흔하게 나타납니다.
파이썬에서 import는 실제 객체가 모듈 내부에 정의되어 있어야 정상적으로 작동합니다. 정의되지 않은 이름을 가져오려고 하거나, 아직 로딩되지 않은 시점에 참조하면 ImportError
가 발생합니다.
● 오류 발생 예시
# mod_a.py
from mod_b import func_b
def func_a():
print("A")
# mod_b.py
from mod_a import func_a
def func_b():
print("B")
위 코드는 mod_a
와 mod_b
가 서로를 동시에 참조하는 순환 import 구조를 가졌기 때문에 ImportError
가 발생합니다.
● 일반적인 원인
- 모듈 내부에 해당 이름이 정의되어 있지 않음
- 정의된 순서보다 먼저 import를 시도함 (정의되기 전 참조)
- 모듈 간 상호 참조로 인한 순환 import
- __init__.py에서 이름을 명시적으로 내보내지 않은 경우
● 해결 방법
- 대상 모듈에 해당 이름이 실제로 정의되어 있는지 확인
- 모듈을 실행 가능한 순서로 리팩토링하거나, import 위치를 함수 내부로 이동
- 불필요한 상호 참조는 구조적으로 제거하거나 공통 모듈로 분리
● 디버깅 팁
print(dir(모듈))
을 통해 실제 정의된 이름 목록 확인- 순환 import 의심 시, import 순서를 늦추거나 지연 로딩(lazy import) 사용
- import할 이름이 클래스/함수/변수인지 구체적으로 구분
● 결론
ImportError - cannot import name
오류는 모듈 내부에 없는 이름을 가져오려 하거나, 순환 참조로 인해 모듈이 완전히 로드되기 전에 import를 시도했을 때 발생합니다. 해결을 위해서는 해당 이름이 정의된 위치를 명확히 파악하고, 모듈 간 의존성을 구조적으로 조정하는 것이 가장 효과적입니다.
728x90