project/
│
├── main.py
└── a_dir/
├── __init__.py
├── a_run.py
└── a_b.py
위와 같은 디렉토리 구조에서
main.py를 통해 a_run.py를 호출하고 여기서 다시 a_b를 참조하는 경우
a_run 파일에서 다음과 같이 절대 경로로 명시하였다면 오류가 생길 수 있습니다.
from a_b import a_b_function
이 경우 두 가지 방법으로 해결 가능합니다
from .a_b import a_b_function
위와 같이 경로에 .을 붙여 상대 경로로 사용합니다
import sys
import os
# 프로젝트의 루트 디렉토리 경로를 얻습니다.
root_path = os.path.dirname(os.path.abspath('main.py'))
# sys.path에 프로젝트 루트를 추가합니다.
if root_path not in sys.path:
sys.path.append(root_path)
# 이제 a_dir 패키지 내부의 모듈을 절대 경로로 임포트할 수 있습니다.
from a_dir.a_b import a_b_function