목차
1. 모듈 만들기
2. 모듈 불러오기
3. if name == "main":의 의미
4. 클래스나 변수 등을 포함한 모듈
5. 다른 파일에서 모듈 불러오기
6. 다른 디렉터리에 있는 모듈을 불러오는 방법
.py확장자로 만든 파이썬 파일은 모두 모듈이라고 할 수 있다.
mod1.py 파일을 만들어 보자.
# mod1.py
def add(a, b):
return a + b
def sub(a, b):
return a - b
mod1.py에는
add() → 두 수를 더하는 함수
sub() → 두 수를 빼는 함수
가 들어 있다.
즉, mod1.py 자체가 하나의 모듈이다.
만들어 놓은 모듈을 사용하려면 import를 사용한다.
import mod1
mod1.py가 아니라.py를 제외한mod1만 작성한다.
import mod1
print(mod1.add(3, 4))
print(mod1.sub(4, 2))
실행 결과
7
2
모듈 안의 함수를 사용할 때는
모듈이름.함수이름()
형태로 사용한다.
mod1.add(3, 4)
매번
mod1.add()
처럼 모듈 이름을 붙이지 않고 함수 이름만 사용하고 싶다면 from을 사용할 수 있다.
from mod1 import add
이제 다음과 같이 사용할 수 있다.
add(3, 4)
실행 결과
7
여러 개의 함수를 불러오려면 쉼표로 구분한다.
from mod1 import add, sub
add(3, 4)
sub(4, 2)
모듈의 모든 내용을 불러오려면 *을 사용할 수 있다.
from mod1 import *
*은 모든 것을 의미한다.
import mod1
사용
mod1.add(3, 4)
from mod1 import add
사용
add(3, 4)
from mod1 import add, sub
사용
add(3, 4)
sub(4, 2)
from mod1 import *
모듈의 여러 함수 등을 직접 사용할 수 있다.
if __name__ == "__main__":의 의미mod1.py에 다음 코드를 추가해 보자.
# mod1.py
def add(a, b):
return a + b
def sub(a, b):
return a - b
print(add(1, 4))
print(sub(4, 2))
직접 실행하면
5
2
가 출력된다.
하지만 다른 곳에서
import mod1
만 실행해도
5
2
가 출력된다.
import를 하면 해당 모듈의 코드가 실행되기 때문이다.
우리는 add(), sub() 함수만 사용하고 싶은데 아래 코드까지 실행된 것이다.
print(add(1, 4))
print(sub(4, 2))
이를 방지하기 위해 다음과 같이 작성한다.
# mod1.py
def add(a, b):
return a + b
def sub(a, b):
return a - b
if __name__ == "__main__":
print(add(1, 4))
print(sub(4, 2))
이제
python mod1.py
처럼 mod1.py를 직접 실행하면
5
2
가 출력된다.
하지만 다른 파일에서
import mod1
하면 if문 안의 코드는 실행되지 않는다.
__name__이란?__name__은 파이썬이 내부적으로 사용하는 특별한 변수이다.
파일을 직접 실행하면
__name__
에는
"__main__"
이 저장된다.
즉,
if __name__ == "__main__":
의 조건이 참이 된다.
반대로 다른 파일에서
import mod1
하면 mod1.py의 __name__에는
"mod1"
이 저장된다.
직접 실행
python mod1.py
↓
__name__ = "__main__"
↓
if 조건 True
다른 파일에서 import
import mod1
↓
__name__ = "mod1"
↓
if 조건 False
if __name__ == "__main__":은 해당 파일을 직접 실행했을 때만 특정 코드를 실행하고 싶을 때 사용한다.
모듈에는 함수뿐만 아니라
등을 함께 넣을 수 있다.
다음과 같이 mod2.py를 만들어 보자.
# mod2.py
PI = 3.141592
class Math:
def solv(self, r):
return PI * (r ** 2)
def add(a, b):
return a + b
이 모듈에는
PI → 변수
Math → 클래스
add() → 함수
가 들어 있다.
import mod2
print(mod2.PI)
실행 결과
3.141592
import mod2
a = mod2.Math()
print(a.solv(2))
실행 결과
12.566368
동작은
PI * (r ** 2)
이므로
3.141592 × (2²)
↓
12.566368
이 된다.
print(mod2.add(mod2.PI, 4.4))
실행 결과
7.541592
즉, 모듈 안의 요소들은
모듈이름.변수
모듈이름.클래스
모듈이름.함수
형태로 사용할 수 있다.
모듈은 파이썬 대화형 인터프리터뿐만 아니라 다른 .py 파일에서도 사용할 수 있다.
예를 들어 같은 폴더에 다음 두 파일이 있다고 하자.
mod2.py
modtest.py
modtest.py
import mod2
result = mod2.add(3, 4)
print(result)
실행 결과
7
즉,
modtest.py
↓
import mod2
↓
mod2.py의 기능 사용
이 가능하다.
기본적으로 위 예제처럼 사용하려면 modtest.py와 mod2.py가 같은 디렉터리에 있으면 된다.
지금까지는 모듈이 현재 작업하는 디렉터리에 있었다.
하지만 모듈이 다른 디렉터리에 있다면 어떻게 해야 할까?
예를 들어 mod2.py가 다음 위치에 있다고 해보자.
C:\doit\mymod\mod2.py
이때 다른 위치에서도 mod2를 불러올 수 있는 방법을 알아보자.
sys.path.append 사용하기먼저 sys 모듈을 불러온다.
import sys
sys.path를 확인하면
sys.path
파이썬이 모듈을 찾는 디렉터리 목록을 확인할 수 있다.
즉, 파이썬은 모듈을 import할 때 sys.path에 등록된 위치들을 검색한다.
원하는 디렉터리를 추가해 보자.
sys.path.append("C:/doit/mymod")
이제
import mod2
가 가능하다.
print(mod2.add(3, 4))
실행 결과
7
sys.path
↓
파이썬이 모듈을 검색하는 경로 목록
sys.path.append("C:/doit/mymod")
↓
새로운 모듈 검색 경로 추가
↓
import mod2 가능
PYTHONPATH 환경 변수 사용하기다른 방법으로 PYTHONPATH 환경 변수를 사용할 수 있다.
Windows에서는
set PYTHONPATH=C:\doit\mymod
을 설정한 후 파이썬을 실행한다.
python
이제
import mod2
print(mod2.add(3, 4))
를 사용할 수 있다.
실행 결과
7
맥이나 리눅스에서는 set 대신 export를 사용한다.
export PYTHONPATH=~/doit/mymod
PYTHONPATH에 모듈이 있는 디렉터리를 등록하면 해당 디렉터리로 직접 이동하지 않아도 모듈을 불러올 수 있다.
| 문법 | 설명 |
|---|---|
import mod1 | 모듈 전체 불러오기 |
mod1.add() | 모듈 안의 함수 사용 |
from mod1 import add | 특정 함수 불러오기 |
from mod1 import add, sub | 여러 함수 불러오기 |
from mod1 import * | 모듈의 여러 요소 불러오기 |
__name__ | 현재 모듈의 이름을 나타내는 특별한 변수 |
if __name__ == "__main__": | 해당 파일을 직접 실행했을 때만 코드 실행 |
sys.path | 파이썬이 모듈을 찾는 경로 목록 |
sys.path.append() | 모듈 검색 경로 추가 |
PYTHONPATH | 모듈 검색 경로를 환경 변수로 지정 |
모듈 = 다른 파이썬 파일에서 가져다 사용할 수 있는
.py파일
가장 기본적인 흐름은 다음과 같이 기억하면 된다.
mod1.py 생성
↓
함수 / 변수 / 클래스 작성
↓
import mod1
↓
mod1.함수()
그리고 __name__ 부분은 다음 두 가지만 기억하면 된다.
직접 실행 → __name__ == "__main__"
import 실행 → __name__ == "모듈이름"