Python에 있는 기본적인 내장 함수를 제외하고 자체적으로 생성하거나 사람들과 직접 공유할 수 있는 변수, 함수, 클래스의 모음을 모듈(module)이라 하고, 그 모듈을 묶어 사용하는 것을 패키지(package)라고 한다.
모듈은 기본적으로 'Python File(확장자 .py
)'로 존재하며, 이 파일을 Python에 불러와 사용하는 것이다.
일단 간단하게 모듈 파일을 하나 만들어 보았다.
파일명은 mod1.py
mod1.py
def add(a, b): return a + b def sub(a, b): return a-b
덧셈과 뺄셈을 하는 간단한 함수를 만들어 모듈 파일에 저장하고 만들었다.
우선 모듈 파일을 불러와 사용하기 위해서는 저장한 디렉터리로 이동하여 접근하거나, 모듈 파일(mod1.py
)과 불러오는 파일(main.py
) 모두 같은 디렉터리 내에 존재 하여야 한다.
main.py
import mod1 print(mod1.add(3, 4)) print(mod1.sub(4, 2))
위의
main.py
를 실행해보면,결과
7 2
이처럼 모듈 자체를 불러와서 main.py
파일에 적용시킬 수 있는 것이다.
모듈을 통채로 가져오는 것 대신 그 안의 함수만 따로 가져오는 방법도 존재한다.
main.py
from mod1 import add print(add(3, 4)) print(sub(4, 2))
결과
7 Traceback (most recent call last): File "/Users/choemin/Documents/Project/main.py", line 3, in <module> print(sub(4, 2)) NameError: name 'sub' is not defined
모듈의 함수 중 일부만 따로 불러오는 것이기 때문에 불러온add
함수만 적용되고 sub
함수는 에러가 뜨는 것을 볼 수 있다.
모듈의 전체 함수를 불러오는 방법은 *
을 사용하면 된다.
main.py
from mod1 import * print(add(3, 4)) print(sub(4, 2))
결과
7 2
패키지는 모듈을 계층적으로 관리하는 방법으로,
패키지.모듈
의 구조로 불러와 사용할 수 있다.
calc
패키지를 만들어서 간단한 사칙연산을 할 수 있는 모듈을 추가해주었다.
mod2.py
def mul(a, b): return a * b def div(a, b): return a/b
directory
calc/ __init__.py mod1.py mod2.py
__init__.py
의 용도 :
패키지 폴더 내에__init__.py
파일이 존재하면 그 폴더를 패키지로 인식함.
(python 3.3 이상부터는__init__.py
파일이 없어도 패키지로 인식가능)
파일 내 패키지를 불러올때 범위를 지정해주는 용도로 사용.
위의 디렉토리처럼 calc
폴더 내에 __init__.py
를 추가해 하위 버전의 python에도 인식되도록 만들어 주었다.
패키지를 불러오는 방법으로는 import 패키지.모듈
로 불러와서
패키지.모듈.변수
or 패키지.모듈.함수or클래스()
형태로 사용할 수 있다.
main.py
import calc.mod1 import calc.mod2 print(calc.mod1.add(3, 4)) print(calc.mod1.sub(4, 2)) print(calc.mod2.mul(3, 4)) print(calc.mod2.div(4, 2))
결과
7 2 12 2.0
패키지도 모듈과 마찬가지로 from 패키지.모듈 import
로 일부만 따로 불러올 수 있다.
main.py
from calc.mod1 import * from calc.mod2 import * print(add(3, 4)) print(sub(4, 2)) print(mul(3, 4)) print(div(4, 2))
결과
7 2 12 2.0