직접 개발한 local package의 경우, import 할 때 해당 package의 위치에 맞게 import 경로를 잘 선언해야 한다.
local package를 import하는 경로에는 absolute path와 relative path가 있다.
아래와 같은 프로젝트로 예를 들어본다.
└── my_app
├── main.py
├── package1
│ ├── module1.py
│ └── module2.py
└── package2
├── __init__.py
├── module3.py
├── module4.py
└── subpackage1
└── module5.py
from package1 import module1
from package1.module2 import function1
from package2 import class1
from package2.subpackage1.module5 import function2
시작점은 모두 my_app
프로젝트의 최상위 디렉토리인 package1
과 package2
기준은 최상위 디렉토리
from package2.subpackage1.module5 import function2
위의 경로를 리눅스의 경로형식으로 바꾸면
my_app/package2/subpackage1/module5.py
윈도우의 경로형식으로 바꾸면
my_app/package2/subpackage1/module5.py
파이썬에서는 dot.
을 사용
package2.subpackage1.module5.py
기준은 현재 위치
# package2/module3.py
from . import class1
from .subpackage1.module5 import function2
dot.
은 import가 선언되는 파일의 현재 위치를 말한다.
dot 2개 ..
는 현재위치의 상위 디렉토리를 말한다.
# subpackage1/module5.py
from ..module4 import class4
# subpackage1(현재파일의 위치)의 상위디렉토리인 package2에 있는 module4에서 import
- Absolute path의 경우, 경로의 길이가 너무 길어질 수 있다.
- Relative path의 경우, 경로의 길이를 줄여줄 수는 있지만,
헷갈리기 쉽고 파일위치가 변경되면 경로위치도 변경되어야 한다는 단점이 있다.
🥨 웬만한 경우 Absolute path의 사용을 권장한다.