TIL-no.23 How Import Statement Finds Modules & Packages

백선호·2021년 7월 9일
0

TIL

목록 보기
21/39
post-thumbnail

Python은 Module/package를 찾을때 3가지 순서로 장소를 찾는다.첫번째 sys.modules, 두번째 built-in modules, 세번째 sys.path 순서이다.

1. sys.modules

파이썬이 모듈이나 package를 찾기위해 가장 먼저 확인하는 곳이다. 단순한dictionary라고 생각하면 쉽다. 이미 import된 모듈과 package들을 저장하고 있다. 그러나 새로 import 하는 모듈은 찾을 수 없다.

2. built-in modules

파이썬에서 제공하는 파이썬 공식 라이브러리들 이다. Built-in 모듈들은 이미 파이썬에 포함되어 나오므로 파이썬이 쉽게 찾을 수 있다.

3. sys.path

마지막으로 보는 장소가 바로 sys.path 이다. sys.path는 기본적으로 list이며 string 요소들을 가지고 있는 list 이다. 만약 sys.path 에서도 못찾으면 ModuleNotFoundError 에러를 리턴한다.

Absolute Path & Relative Path

직접 개발한 local package를 import 할때는 해당 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

1. Absolute Path

뜻 그대로 절대 경로이다. import를 하는 파일이나 경로에 상관없이 항상 경로가 동일하기 때문입다. 절대 경로들의 시작점이 전부 프로젝트의 가장 최상위 디렉토리에서 시작한다.

<Absolute path를 사용해 package1  package2를 import >
from package1 import module1
from package1.module2 import function1
from package2 import class1
from package2.subpackage1.module5 import function2

2. Relative Path

절대경로와 다르게 import 하는 위치를 기준으로 경로를 정의한다. 그래서 일반적으로 relative path는 local package 안에서 다른 local package를 import 할때 사용된다.

예를 들어, package2의 module3에서 package2의 class1과 package2의 하위 package인 subpackage1의 module5의 function2 함수를 import 하려고 하면 다음 처럼 할 수 있다.(여기서 (.)은 현재 위치를 나타내고 (..)는 현재위치에서 상위 디렉토리로 가는 경로를 나타낸다.

from . import class1
from .subpackage1.module5 import function2

웬만한 경우 absolute path를 사용하는게 권장!

profile
baik9261@gmail.com

0개의 댓글