Today I Learnt How to Import

sys.module

현재 시스템 상에 import 된 모듈과 패키지들을 저장하고 있다. dictionary 형식으로 저장 되어 있다. 한번 import한 경로를 다시 선언하지 찾지 않아도 되도록하는 기능을 갖고 있다.

built-in modules

python에서 제공 되는 공식 라이브러리이다. print, len과 같은 built-in function과 같이 파이썬에서 기본으로 저장되어있는 라이브러리이다. 아래 링크에서 목록을 확인해 볼수가 있다.
Python built_in module index

sys.path

파일이 시스템 상에 저장되어 있는 경로이다.

['',
'/Users/song-eun-u/anaconda3/bin',
'/Users/song-eun-u/anaconda3/lib/python36.zip',
'/Users/song-eun-u/anaconda3/lib/python3.6',
'/Users/song-eun-u/anaconda3/lib/python3.6/lib-dynload',
'/Users/song-eun-u/anaconda3/lib/python3.6/site-packages',
'/Users/song-eun-u/anaconda3/lib/python3.6/site-packages/aeosa',
'/Users/song-eun-u/anaconda3/lib/python3.6/site-packages/IPython/extensions',
'/Users/song-eun-u/.ipython']

다음과 같은 경로로 표시가 된다. 왼쪽부터 상위 폴더이며 오른쪽으로 가면서 depth가 늘어난다고 이해하면 된다. 리스트 형식으로 표현되어있으며 해당 경록에서 찾지 못하면 ModuleNotFoundError 가 발생한다.

sys

파이썬은 sys의 경로를 어떻게 찾을까?
sys를 import하여서 print를 해보면 알수가 있다.

🐍
import sys

print(sys)

🚩결과
<module 'sys' (built-in)>

결과를 보듯이 sys의 경로는 built-in module이다. 파이썬에 저장이 되어있기 때문에 따로 찾을 필요가 없다는 것을 알 수가 있다.

Absolute path와 relative path

절대 경로와 상대 경로이다. 절대 경로는 말 그대로 불러들이는 파일의 절대적인 경로이다.
윗 sys.path에서 보이는 대로 리스트 형식의 주소인데 절대 상위 폴더인 Users 부터 해당 파일까지의 상세 경로이다. 집주소로 예를 들면 위코드의 주소인
대한민국 서울특별시 강남구 테헤란로 427 위워크타워 와 같은 주소이다.
이주소는 상세하고 틀릴일이 없지만 파일과 같이 depth가 깊은 주소를 사용할때에는 복잡하고 매번 쓰기 번거롭다. 그렇기 때문에 상대적인 주소로 경로를 탐색한다. 만약 서울시 강남구에 살고 있는 사람끼리의 주소를 공유시
테헤란로 427 위워크타워 이미 서로 강남구에서 대화를 나누기에 이렇게 앞부분을 생략할 수가 있다.

relative path도 마찬가지이다. 이미 같은 파일상에 모듈과 패키지가 저장이 되어 있으면 상위폴더까지 선언할 필요없이 현재 폴더에서 폴더를 찾는 방식이다.

Calculator 패키지 만들기를 통해 경로 이해하기

여기서 init.py는 아무 코드도 없지만 해당 디렉토리가 패키지임을 알려주는 역할이다.
각각의 파일에는 다음 코드들이 담겨 있다.

main.py

# absoulte path
#from calculator.add_and_multiply import add_and_multiply 


# relative path
from .calculator.add_and_multiply import add_and_multiply


if __name__ == '__main__':
    print(add_and_multiply(1,2))

add_and_multiply.py

from .multiplication import multiply
# from calculator.multiplication import multiply
def add_and_multiply(a,b):
    return multiply(a,b) + (a+b)

multiplication.py

def multiply(a,b):
    return(a*b)

main.py에 add_and_mutiply를 import하여 실행 해보았다.

 [Errno 2] No such file or directory

이러한 에러가 발생하여 실행을 할수가 없다고 한다. 현재 main.py의 현재 경로는 main이기 때문에 절대 경로를 사용해야한다.

init.py 파일의 역할

해당 파일이 포함된 디렉토리는 패키지임을 알려준다. 또한 __init__.py파일을 통해 사용하고자하는 파일의 경로수를 줄여줄수가 있다.

python3.3버전 부터는 __init__.py 없이도 패키지로 인식하기 때문에 안써도 되지만 이전 버전에서는 생성을 해서 사용해야한다.

좋은 웹페이지 즐겨찾기