직접 개발한 Local Package를 import 하는 경로에는 absolute path 와 relative path 가 있습니다.
import를 하는 파일이나 경로에 상관없이 항상 경로가 동일합니다.
my_app
프로젝트는 package1
과 package2
라는 2개의 package를 가지고 그중 package2
는 subpackage2
라는 중첩 package를 가지고 있습니다.
Absolute path를 사용해 package1
과 package2
를 import하면 다음과 같습니다.
from package1 import module1
from package1.module2 import function1
from package2 import class1
from package2.subpackage1.module5 import function2
경로의 시작점은 전부 my_app
프로젝트의 최상단 디렉토리에서 시작합니다.
예를 들어, subpackage1
의 module5
모듈의 function2
함수를 import 한다면 다음의 경로를 거치게 됩니다.
my_app ⇒ package2 ⇒ subpackage1 ⇒ module5.py
리눅스
my_app/package2/subpackage/module5.py
윈도우
my_app\package2\subpackage1\module5.py
파이썬
my_app.package2.subpackage1.module5.py
from import 키워드를 사용하면
from package2.subpackage1.module5 import function2
일반적으로 local package를 import 할 때는 absolute path를 사용하면 됩니다.
경로가 길어집니다.
단점을 보완하기 위해 relative path 사용
Absolute path 와 다르게 import 하는 위치를 기준으로 경로를 정의합니다.
일반적으로 relative path는 local package 안에서 다른 local package를 import 할 때 사용합니다.
위의 my_app
프로젝트를 생각했을 때
예를 들어, package2
의 module3
에서 package2
의 class1
과 package2
의 하위 package인 subpackage1
의 module5
의 function2
함수를 import 하려 한다면 다음과 같이 할 수 있습니다.
# package2/module3.py
from . import class1
from .subpackage1.module5 import function2
.
은 import가 선언되는 파일의 현재 위치를 의미한다.
..
은 현재 위치에서 상위 디렉토리로 가는 경로입니다.
# subpackage1/module5.py
from ..module4 import class4
선언해야하는 경로의 길이를 줄여줍니다.
파일 위치가 변경되면 경로 위치도 변경되여야 합니다.
웬만한 경우 absolute path 를 사용하는 것을 권장합니다.