파이썬에서 모듈은 변수나 함수 , 그리고 클래스 등을 모아놓은 파일이다. 모듈로서 모와두는 이유는 다른파일에서 재사용이 가능하게 하고, 전체코드가 너무 길어 한 파일에 넣기에는 너무 클때, 여러 파일로 쪼개서 관리하고 싶을때 모듈로 모와서 관리할 수 있다. 즉 , 모듈은 python 코드 파일들의 모임의 집합을 의미힌다.
모듈을 불러올때에는 import <module name>
으로 사용하며, 모든 것을 끌어다 쓰는 것이 아닌 원하는 함수나 클래스명만 끌어다 사용하고 싶을 때애는 from <module name>
import 모듈함수이름, 클래스 as nickname 방식으로 사용 할 수 있다.
새로운 이름을 만들지 않고 가져올 때에는 from <module name>
import 모듈함수이름 방식으로 가능하나 혹시 이름이 중복이 될 경우 발생할 에러를 줄이고자 닉네임 방식으로 불러오기를 추천한다.
모듈을 import 할때 돌아가는 구조는 아래를 참조하기를 바란다.
Packages도 Module과 비슷하지만 더 큰 개념으로서 차이점은 Modules보다 더 크고 복잡한 코드가 내장되어 있다는 것이다.
Module이 단순한 파이썬 파일로 이루어져 있고 어떠한 모듈에는 많은 파일이 들어가다 보니 나눠서 관리가 필요한데 그럴 때 쓰는 것이 이 package이다. package는 module을 모아 놓은 directory 구조라고 할 수 있다.
package는 파이썬 파일들로 이루어져 있는 디렉토리(dicretory)가 하나의 package가 되는 것이다.
package는 일반 모듈처럼 사용가능하며, 객체를 사용하는 방법인 "Dot notation"방식으로 import 할 수 있다. package의 개념과 사용법은 아래를 참조하자.
import pkg.mod1
from pkg.mod2 import func2
pkg.mod1.func2()
func2()
앞서서 모듈(module)과 패지키(package)에 대해 우리는 알아보았다. 그렇다면, 파이썬은 import 할때 어떤 순서에 의해서 불러오는 것일까? 아래의 순서에 의해 파이썬은 순차적으로 검색을 진행하며 모듈이나 패키지를 불러온다.
- sys.modules
- Built - in modules
- sys.path
정리를 하자면, 파이썬은 import 하고자 하는 모듈과 package를 찾을때에 먼저 sys.modules를 보고, 없으면 파이썬 built-in 모듈들을 확인 하고 마지막으로 sys.path에 지정되어 있는 경로들을 확인해서 찾습니다. sys.path 에서도 못찾으면ModuleNotFoundError 에러를 리턴합니다.
이 순서에 대해 간략하게 정리하면 파이썬은 import 하고자 하는 모듈과 package를 찾을때에 먼저 sys.modules를 보고, 없으면 파이썬 built-in 모듈들을 확인 하고 마지막으로 sys.path에 지정되어 있는 경로들을 확인해서 찾습니다. sys.path 에서도 못찾으면 ModuleNotFoundError 에러를 리턴합니다.
파이썬이 모듈이나 package를 찾기위해 가장 먼저 확인하는 곳이라고 할 수 있다. sys.modules는 단순한 dictionary 이며 이미 import된 모듈과 package들을 저장하고 있다. sys.modules는 이미 로딩된 패키징와 모듈을 딕셔너리 형태로 저장하고 있습니다. key값으로 모듈명 value는 sys.path를 가지고 있는 형태이다.
한번 import된 모듈과 package들은 파이썬이 또 다시 찾지 않아도 되도록 하는 기능을 가지고 있습니다. 한마디로 매번 불러오는 번거로운 반복 과정을 거치지 않기 위해 파이썬은 한번 import 된 것은 sys.modules에 기억하도록 되 어 있어 금방 불어오게끔 해주는 것이다. 그래서 새로 import 하는 모듈은 sys.modules 에서 찾을 수 없습니다.
파이썬에서 제공하는 파이썬 공식 라이브러리들 입니다. Built-in 모듈들은 이미 파이썬에 포함되어 나오므로 파이썬이 쉽게 찾을 수 있습니다.
sys.path는 마지막으로 파이썬이 검색하는 장소로서 , 기본적으로 list이며 string 요소들을 가지고 있는 list 입니다.
파이썬은 list의 각 경로를 하나 하나 확인하면서 해당 경로에 import 하고자 하는 package가 위치해 있는지 확인합니다.
깨알 Tip:
sys(system-speceific parameter and functions) 는 파이썬이 기본제공하는 모듈로서 Bulit-in 하는 과정에서 이미 기본 내장된 모듈 이며 C언어로 작성되어 있다. 즉, sys 는 파이썬에 포함되어 있는 모듈입니다. 그러므로 다음 처럼 sys 모듈을 import 해서 sys.modules와 sys.path 를 출력할수도 있고 수정 할 수 도 있습니다. 기본 내장 모듈이기 때문에 파이썬이 import시 자동으로 찾게끔 되어 있다.