IT/python

[python] 서로 다른 경로에 있는 모듈 import 하기

심량 2020. 7. 22. 18:58

요새는 파이썬을 만지고 있습니다.

초짜이다 보니 삽질하면서 적응해가고 있는데 내가 만든 모듈을 불러들여야 하는데 안불러지는 경우가 발생했습니다.

대략 다음과 같은 폴더 구조입니다.


aa.py 에서 bb.py 가 필요한데..
from dirB import bb.py 하니까 없는 모듈이라고 뜹니다..

찾아보니 파이썬의 from, import 는 현재 위치 기준 상대경로로 인식된다고 합니다.
그래서 sys.path 에 절대경로 값을 추가해 준 다음 import 를 해야 하는 상황입니다.

답만 나열하자면 aa.py 에서 bb.py 가 필요한 시점에 다음과 같이 작성했습니다.

import os, sys
# 프로젝트 root\dirB를 import 참조 경로에 추가
sys.path.append(
os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))), 'dirB'))
import bb

이렇게 해서 동작합니다. 다만, vscode 에서 ip 가 unresolved 되었다고 경고를 내보내서 다음과 같이 수정했더니 경고 없이 깔끔히 동작합니다.

import os, sys
# 프로젝트 root를 import 참조 경로에 추가
sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
from dirB import bb

별거 없습니다. __file__ 은 파일이름 포함 절대 경로입니다. 예를 들면 c:\project\dirA\subdirAA\aa.py 와 같은 형태입니다.

여기서 dirname()을 처음 쓰면 aa.py 가 날라가고 두번째 쓰면 subdirAA가 날라가고 세번째 쓰면 dirA가 날라갑니다. 여기에 join으로 dirB 를 붙여주어 sys.path에 append한 다음 bb 를 import 하던가 join은 빼고 최상위 경로까지만 sys.path에 append 해주고 from dirB import bb 로 사용할 수 있습니다.

좀 귀찮지만 또 사용할 경우가 있을 것 같아서 정리합니다.