[TIL]Absolute path & relative path

dustjd1535·2020년 8월 24일
0

Absoluete path

Absoluete, 절대적인 위치를 기준으로 하는 경로이다.
프로젝트 최상단에서 시작하여 해당 파일의 위치까지의 모든 경로를 나타낸다.

relative path

Relative, 상대적인 위치를 기준으로 하는 경로이다.
import하는 지점을 기준으로 일부의 경로를 나타낸다.

1. Absoluete path

다음과 같은 경로가 있다고 가정했을때,

└── my_app
    ├── main.py
    ├── package1
    │   ├── module1.py
    │   └── module2.py
    └── package2
        ├── __init__.py
        ├── module3.py
        ├── module4.py
        └── subpackage1
            └── module5.py

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

Python에서는 dot notation을 사용한다.

my_app.package2.subpackage1.module5.py

이미 my_app 프로젝트 안에 있으므로 my_app은 생략될 수 있다.

2. Relative Path

Relative path는 absolute path와 다르게 프로젝트의 최상단 디렉토리를 기준으로 결로를 잡는게 아니라 import하는 위치를 기준으로 경로를 정의한다. 그래서 일반적으로 relative path는 local packager 안에서 다른 local package를 import 할 떄 상용된다.

package2의 module3에서 package2의 class1광 package2의 하위package인 subpackage1의 module5의 funtion2 함수를 import 하게 된다면 다음 처럼 할 수 있다.

└── my_app
    ├── main.py
    ├── package1
    │   ├── module1.py
    │   └── module2.py
    └── package2           #여기의 class1을 import하려고 함.
        ├── __init__.py
        ├── module3.py     #여기서
        ├── module4.py
        └── subpackage1 
            └── module5.py #여기의 function2를 import하려고 함.
# package2/module3.py

from . import class1
from .subpackage1.module5 import function2

여기에서 **.**은 현재 위치를 나타낸다.

또한 dot 2개를 사용하여 현재위치에서 상위 디렉토리로 가는 경로를 나타낼수 있다.

└── my_app
    ├── main.py
    ├── package1
    │   ├── module1.py
    │   └── module2.py
    └── package2           
        ├── __init__.py
        ├── module3.py     
        ├── module4.py     #여기의 class4를 import하려고 함.
        └── subpackage1 
            └── module5.py #여기서
# subpackage1/module5.py
from ..module4 import class4

Relative Path는 디렉토리의 위치가 바뀔때마다 코드를 바꿔줘야 하므로 좋은 방법은 아니다.

profile
더 나은 개발자가 되자.

0개의 댓글