위코드 6기 day4 2020.01.31
모듈은 변수, 함수, 클래스 등을 모아놓은 파일입니다. 모듈을 만드는 이유는 다른 파일에서 재사용 할 수 있고 한 파일에 넣기에 많은 양의 코드를 여러 파일로 나눌 수 있기 때문입니다. 모듈은 확장자가 py인 파일로 만들 수 있으며 패키지는 여러개의 모듈 파일을 모아둔 directory입니다. 라이브러리는 배포되어 있는 모듈과 패키지로 쉽게 import해서 사용할 수 있습니다.
모듈과 패키지를 사용하기 위해서 import
를 사용하며 import
할 때 파이썬은 3가지 장소 순서대로 해당 모듈과 패키지를 찾습니다.
>>> import sys
>>> sys.modules
{'builtins': <module 'builtins' (built-in)>, 'sys': <module 'sys' (built-in)>, '_frozen_importlib': <module 'importlib._bootstrap' (frozen)>,
#.....이하 생략
}
>>>
>>> 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']
>>>
위 import sys
에서 의문이 생깁니다. sys도 import 해야 사용할 수 있는 모듈인데 import 되기 전에 어떻게 sys.modules 에 있는 자기 자신을 찾을 수 있을까요.
https://docs.python.org/ko/3/tutorial/modules.html#standard-modules
어떤 모듈들은 인터프리터에 내장됩니다; 이것들은 언어의 핵심적인 부분은 아니지만 그런데도 내장된 연산들에 대한 액세스를 제공하는데, 효율이나 시스템 호출과 같은 운영 체제 기본 요소들에 대한 액세스를 제공하기 위함입니다. 그런 모듈들의 집합은 설정 옵션인데 기반 플랫폼 의존적입니다. 예를 들어, winreg 모듈은 윈도우 시스템에서만 제공됩니다. 특별한 모듈 하나는 주목을 받을 필요가 있습니다: sys. 모든 파이썬 인터프리터에 내장됩니다.
파이썬 built-in 모듈과 외부 모듈이 아닌 직접 개발한 local 모듈을 불러올 때는 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를 사용합니다.
from . import func