본문 바로가기

Error and Solve

[오류 해결] Python에서 ModuleNotFoundError 발생: 파일 이름과 패키지 이름이 충돌할 때 / 파일 이름 바꾸기

반응형

 

 

Python에서 ModuleNotFoundError 발생: 파일 이름과 패키지 이름이 충돌할 때

 

Python을 사용하다 보면 패키지를 정상적으로 설치했는데도 불구하고 ModuleNotFoundError가 발생하는 경우가 있습니다. 그 중 하나는 내가 만든 파일 이름이 설치한 패키지와 동일할 때 발생하는 문제입니다.

예를 들어, 다음과 같은 오류를 만난 적이 있습니다.

 
ModuleNotFoundError: No module named 'mypackage.graph'; 'mypackage' is not a package

처음에는 패키지 설치 문제인가 싶었지만, 원인은 단순했습니다. 프로젝트 루트 디렉토리에 mypackage.py라는 파일이 있었고, 이 파일이 실제 설치된 패키지보다 우선적으로 import 대상이 되어버린 것입니다. 결국 Python은 진짜 패키지를 찾지 못하고 "이건 패키지가 아니다"라는 오류를 던진 것이죠.

 

해결 방법: 이름 바꾸기

 

왜 이런 문제가 생기는가?

Python은 import 시에 다음 순서대로 모듈을 탐색합니다:

  1. 현재 실행 중인 스크립트가 위치한 디렉토리
  2. PYTHONPATH 환경 변수에 등록된 경로
  3. site-packages (pip으로 설치된 라이브러리)

따라서 내가 작성한 mypackage.py 파일이 프로젝트 루트에 있으면, 설치된 패키지 대신 이 파일을 먼저 읽어버립니다.

 

이 파일은 당연히 패키지가 아니므로 ModuleNotFoundError가 발생하게 됩니다.

 

 

해결 방법

  1. 파일 이름 변경하기
    설치된 패키지와 동일한 이름을 쓰지 마세요.
    예:
    • mypackage.py → my_project.py
    • langgraph.py → graph_example.py
  2. 패키지를 명확하게 import하기
    절대경로나 가상환경을 다시 확인하세요. 하지만 대체로 원인은 이름 충돌이므로 파일명을 바꾸는 것이 확실한 방법입니다.
  3. 구조적으로 관리하기
    프로젝트 루트에 패키지 이름과 겹칠만한 파일을 두지 말고, src/ 디렉토리 같은 구조를 활용하세요

 

 

ModuleNotFoundError가 난다고 해서 항상 패키지가 설치되지 않은 것은 아닙니다. 때로는 단순히 파일 이름 충돌이 원인일 수 있습니다.
Python은 현재 디렉토리를 최우선적으로 확인하기 때문에, 설치된 패키지와 같은 이름의 파일을 만들면 충돌이 일어납니다.

 

해결책은 간단합니다. 파일명을 바꿔라.

 

 

 

 

끝.

반응형