python 모듈 및 패키지 import

whybein·2020년 1월 31일
0

Python

목록 보기
3/7
post-thumbnail

위코드 6기 day4 2020.01.31

모듈은 변수, 함수, 클래스 등을 모아놓은 파일입니다. 모듈을 만드는 이유는 다른 파일에서 재사용 할 수 있고 한 파일에 넣기에 많은 양의 코드를 여러 파일로 나눌 수 있기 때문입니다. 모듈은 확장자가 py인 파일로 만들 수 있으며 패키지는 여러개의 모듈 파일을 모아둔 directory입니다. 라이브러리는 배포되어 있는 모듈과 패키지로 쉽게 import해서 사용할 수 있습니다.

모듈과 패키지를 사용하기 위해서 import 를 사용하며 import 할 때 파이썬은 3가지 장소 순서대로 해당 모듈과 패키지를 찾습니다.

  1. sys.modules
  2. built-in modules
  3. sys.path

1. sys.modules 와 sys.path

  • sys.modules
    sys.modules는 단순한 directory로 이미 import된 모듈과 패키지들을 저장하고 있습니다. 한 번 import된 모듈과 패키지들은 파이썬이 또 찾지 않으며, 새로 import하는 모듈은 sys.modules에서 찾을 수 없습니다. dictionary 형태로 되어 있으며 파이썬을 설치할 때 built-in 모듈인 sys를 포함해 많은 모듈들이 기본적으로 포함되어 있습니다.
    https://docs.python.org/3/library/sys.html#sys.modules
>>> import sys
>>> sys.modules
{'builtins': <module 'builtins' (built-in)>, 'sys': <module 'sys' (built-in)>, '_frozen_importlib': <module 'importlib._bootstrap' (frozen)>,
 #.....이하 생략
}
>>> 
  • sys.path
    built-in을 포함해서 sys.modules에서 라이브러리를 찾고 없을 경우 sys.path에서 찾습니다. sys.path는 모듈과 패키지가 설치되어 있는 경로를 stinrg 형식의 list로 갖고 있는 directory입니다.
    https://docs.python.org/3/library/sys.html#sys.path
>>> sys.path
['', '/home/whybein', '/usr/bin', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages']
>>> 

2. imort sys

import sys에서 의문이 생깁니다. sys도 import 해야 사용할 수 있는 모듈인데 import 되기 전에 어떻게 sys.modules 에 있는 자기 자신을 찾을 수 있을까요.

https://docs.python.org/ko/3/tutorial/modules.html#standard-modules

어떤 모듈들은 인터프리터에 내장됩니다; 이것들은 언어의 핵심적인 부분은 아니지만 그런데도 내장된 연산들에 대한 액세스를 제공하는데, 효율이나 시스템 호출과 같은 운영 체제 기본 요소들에 대한 액세스를 제공하기 위함입니다. 그런 모듈들의 집합은 설정 옵션인데 기반 플랫폼 의존적입니다. 예를 들어, winreg 모듈은 윈도우 시스템에서만 제공됩니다. 특별한 모듈 하나는 주목을 받을 필요가 있습니다: sys. 모든 파이썬 인터프리터에 내장됩니다.

3. absolute path와 relative path

파이썬 built-in 모듈과 외부 모듈이 아닌 직접 개발한 local 모듈을 불러올 때는 import 경로를 정확하게 지정해 줘야 합니다.

  • absolute path
    absolute path는 윈도우 파일 경로와 같은 개념으로 import 하는 모듈이나 위치에 상관없이 항상 동일한 경로를 사용합니다.
┗ App
	┣ main.py
    ┗ pkg
		┗ mod.py
        	┗ func

위와 같은 프로그램이 있을 경우 기본 경로인 App은 생략하며 absolute path는 아래와 같습니다.

from pkg import mod
from pkg.mod import func
  • relative path
    일반적으로 local 모듈은 absolute path를 사용하는데 absolute path의 길이가 길어지는 점을 보완하기 위한 방법으로 relative path를 사용합니다.

pkg/mod.py

from . import func

.은 현재 import하는 파일의 위치

..는 현재 위치의 바로 상위 위치

 
profile
Back-End Developer

0개의 댓글