지난 시간에 우리는 package 와 module의 개념과 import하는 법과 어떻게 import가 되는 지의 과정에 대해 다뤗다.
- Package & Modules
이번에는 절대 경로와 상대경로가 무엇인지 알아보고 그것의 차이에 대해 알아보자.
절대 경로는 단어의 의미에서 알 수 있듯이 어떠한 경로를 찾는데 있어서 고유의 경로를 말한다.
절대파일 경로는 파일 시스템의 루트에서 시작하여 주어진 파일 or 디렉토리에 엑세스 하는 방법이라고 할 수 있다.
어디에서든 접근 가능한 경로 지정방식
absolute path를 사용시 단점: 경로가 길어질 수 있음
루트 디렉토리(최상단 디렉토리)에서 시작함.
![image-20201125104219881](/Users/byul/Library/Application Support/typora-user-images/image-20201125104219881.png)
위의 그림을 예시로 들어보면, module5를 Import한다고 해보자 .
절대파일 경로의 측면에서 접근하면 my_app => package2 => subpackage1 => module5.py 이렇게 설명 할 수 있다.
이를 우리가 아는 파일 경로식으로 표현하면, my_app/package2/subpackage1/module5.py 표현 가능하다.
이걸 파이썬 표현으로 하면 my_app.package2.subpackage1.module5.py 으로 표현 할 수 있다.
tip : 파이썬에서는 slash (/) 나 back slack() 대신에 dot (.) 을 사용해서 경로를 표현
경로들의 모든 시작점이 "my_app"에서 시작 되는 것을 예시에서 보듯이 프로젝트의 가장 최상위 디렉토리에서 내려오는 방식이라고 생각하면 편하다.
Relative path 는 absolute path와 다르게 프로젝트의 최상단 디렉토리를 기준으로 경로를 잡는게 아니라 import 하는 위치를 기준으로 경로를 정의합니다.그래서 일반적으로 relative path는 local package 안에서 다른 local package를 import 할때 사용됩니다.
Root dicrectory(최상단 디렉토리)를 기준으로 경로를 잡는게 import하는 위치 기준으로 경로를 정의
선언해야 하는 경로의 길이를 줄여준다는 장점
절대경로와 반대로 선언할 시 파일 위치가 변경되면 경로 위치도 변경되어야 하는 단점이 있음.
package가 import 될때 초기 설정을 해줘야 할때가 있습니다.파이썬은 init.py 파일을 통해 package 초기 설정을 가능하게 해줍니다.
디렉토리가 패키지라는 것을 알려주는 역활이며 현재 버전 3.3 부터는 init.py가 없어도 패지키로 인식하도록 업데이트가 되었으나 호환성을 위해서 아직까지는 init.py를 제대로 활용하는 것이 좋다.
- Import 할때 경로의 총 길이 줄여주기
- Package에서 import 할 수 있는 변수/함수/클래스 제한하기
현재 mymath패키지에서 mod1의 add함수를 import한다고 하면,
import my math.mod1
mymath.mod1.add()라고 매번 적어줘야한다. 이를 줄이기 위해 init py에 적어줌으로서 매번 import할 패지키의 경우 적을 경로 길이를 줄여줄 수 있다.
# __ init__.py
from .mod1 import add
# main.py
from mymath import add
add()
2.Package에서 import 할 수 있는 변수/함수/클래스 제한하기
내부적으로만 사용되는 함수의 경우 import 될시 함수 유출이 있을 수 있고, 무/유료로 버전을 나눈다고 했을때 import하고 싶지 않은 기능들은 init.py를 이용하여 제한 할 수 있다.
init.py내 에서 __all__
변수를 설정하고 import할 수 있는 모듈을 정의함으로써, 이 안에 원하지 않은 요소들을 제외하고 넣어서 import하게끔 할 수 있다.
참조 자료:
python MDN : https://docs.python.org/3/tutorial/modules.html#intra-package-references