import를 사용하여 모듈과 패키지를 찾는 방법

이정민·2021년 5월 20일
0

1. sys.modules와 sys.path의 차이점

sys.modules는 dictionary 형태
sys.path는 list 형태
파이썬에서 경로를 찾는 순서 1. sys.modules 2.built-in modules 3. sys.path

1-1. sys.modules

이미 한번 import된 모듈과 package들을 저장하고 있다.
다음에 사용할 때 다시 찾지 않아도 된다.

1-2. sys.path

string 요소들을 가지고 있는 list / 각 string요소들은 경로를 나타냄

2. 파이썬은 sys모듈의 위치를 어떻게 찾을 수 있을까?

파이썬 파일 => 모듈 , 파이썬 파일을 담고 있는 디렉토리 => package

전에 import했던 정보들을 저장해놓는 sys.modu.les를 확인 과정을 거침
파이썬에서 제공하는 공식 라이브러리들(built-in modules)에서 확인 과정 거침
마지막으로 각 경로들을 포함하고 있는 sys.path(list)에서 하나 하나 확인 과정을 거침

3. Absolute path와 relative path의 차이점

absolute path는 모듈 및 패키지의 시작부터 끝까지 생략,축약되지 않고 명확히 명시된 경로를 뜻함(가장 최상위 디렉토리에서 시작)

from package2.subpackage1.module5 import function

relative path는 import하는 위치를 기준으로 경로 정의
주로 local package 안에서 다른 local package를 import할 때 사용

from . import class1 (같은 위치에서 import할 때 현재위치 . 하고 import class1)
from .subpackage1. module5 import function2(하위의 것을 import할때 절대와 비슷하게)
from ..module4 import class4 (상위의 것을 import할 때)

4. calculator 패키지 만들기

처음에는 calculator폴더에 main과 다른모듈들을 같이 넣어서 오류가 계속 났었다.
그래서 calculator_ver1 폴더에 calculator폴더와 main.py를 넣고 나머지 모듈들은 calculator폴더에 넣고 실행이 잘 되었다.

4-1. main.py에서 상대경로로 add_and_multiply를 임포트 했을 때 에러가 발생하는 이유

ImportError: attempted relative import with no known parent package

상위패키지를 못 찾아서 발생하는 에러다.
main은 항상 절대경로를 이용해야한다.

5. add_and_multiply.py에서 multiply함수를 절대경로와 상대경로로 임포트 했을 때 main모듈과의 차이점

절대경로와 상대경로와 상관없이 잘 실행이 된다.
main은 절대경로만 가능하고 상대경로는 오류가 뜬다.

6. __init__.py파일의 역할

해당 디렉토리가 패키지의 일부임을 알려주는 역할
python3.3부터는 init.py가 없어도 패키지로 인식하지만 하위호환을 위해 생성하는게 좋다.

from calculator import * 을 사용했을 시 오류가 뜬다.

init.py에서 all = ['add_and_multiply']를 생성하고

add_and_multiply(모듈명).add_and_multiply(1,2)(사용할 메서스명)

profile
안녕하세요.

0개의 댓글