2018년 11월 1일 목요일

상위 디렉토리의 파이썬 패키지 임포트하기


아래와 같은 디렉토리 구조를 갖는 파이썬 프로젝트가 있다고 합시다.
sample/__init__.py
sample/foo.py
tests/context.py

context.py 코드에서 상위 디렉토리인 sample 패키지를 import 하기 위해 context.py 파일에 아래와 같은 코드를 작성할 수 있습니다.
import os
import sys
sys.path.insert(0, os.path.abspath('..'))

import sample

tests 디렉토리 밑에서 아래와 같이 context.py를 실행하면 이상 없이 작동합니다.
$ python context.py
하지만 tests 상위 디렉토리에서 아래와 같이 context.py를 실행하면 에러가 발생합니다.
$ python tests/context.py

context.py 코드를 아래와 같이 수정하면 어느 디렉토리에서 실행하든지 이상 없이 작동합니다.
import os
import sys
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))

import sample

히치하이커를 위한 파이썬 가이드의 프로젝트 구성하기 부분을 보던 중 영문본과 한글본이 다른 부분을 발견하여 차이점에 대해 적어 보았습니다.



사실은 한글 번역본을 보고 따라 하다가 이상하게 에러가 나길래 몇 시간 삽질해서 깨우친 내용을 적어봅니다.