Python 기본 - 10. 모듈과 패키지

코딩에서 가장 중요한 것은, 바로 남이 구현해 놓은 것을 가져다가 잘 쓰는 것이라고 배웠다.

모듈 (moudule)이란 함수나 변수 혹은 클래스 등을 뫃아놓은 파일이며, 쉽게 말하면 다른 파이썬 프로그램에서 불러와 사용할 수 있게끔 만들어진 파이썬 파일이다.

다른 사람들이 이미 만들어 놓은 모듈을 사용하거나, 내가 직접 만들어서 사용할 수도 있다.

간단히 모듈을 만들고 불러와 보자.

1
2
3
4
5
6
7
8
9
10
11
# my_statistics.py
def add(a,b):
return a + b

def sub(a,b):
return a - b

# my_main.py (my_statistics.py와 같은 폴더 내의 파일)
>>> import my_statistics
>>> print(my_statistics.add(10,20))
30

my_statistics.py라는 모듈을 불러오기 위하여 import 를 사용하였다.

불러온 이후, 모듈 내의 함수 add를 사용하기 위해 모듈이름.함수명() 와 같이 도트 연산자를 붙였다.

my_statistics.add(10,20)

조금 길지 않은가? 모듈 이름을 쓰지 않고 함수를 사용하는 방법도 있다.

1
2
3
4
5
6
7
8
# my_main.py
>>> from my_statistics import sum
>>> print(sum(3,4))
7

>>> from my_statistics import *
>>> print(sub(5,2))
3

위와 같이 from 모듈이름 import 모듈함수 와 같은 형태를 입력하면, 그 함수를 모듈이름을 붙이지 않고 사용할 수 있다.

모듈 내 모든 함수를 불러오려면, *을 붙이면 된다.

이번에는, 앞서 만든 my_statistics.py 모듈에 몇 개의 코드를 추가해 보자.

모듈이 제대로 작동하는지 테스트를 위한 코드이다.

그리고, import를 통해 다른 파이썬 파일에서 모듈을 불러와 보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# my_statistics.py
def add(a,b):
return a + b

def sub(a,b):
return a - b

print(add(1,3)) # 테스트 코드
print("my_statistics 파일입니다") # 테스트 코드

# my_main.py
>>> import my_statistics
4
my_statistics 파일입니다

나는 my_statistics.py 모듈 안의 add 함수와 sub 함수를 사용하려고 import했는데, 테스트 코드까지 같이 출력되어 버린다..

이러한 문제를 방지하기 위하여, if __name__ == "__main__"을 사용한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# my_statistics.py
def add(a,b):
return a + b

def sub(a,b):
return a - b

if __name__ == "__main__":
print(add(1,3))
print("my_statistics 파일입니다")

# my_main.py
>>> import my_statistics
>>>

import를 실행했을 때 이제는 테스트 코드가 출력되지 않음을 알 수 있다.

내가 만약 my_statistics.py을 직접 실행시킬 경우 __name__에는 __main__ 이라는 값이 저장된다.

하지만, my_main.py와 같은 다른 파이썬 파일에서 my_statistics.py을 직접 실행시킬 경우, __name__에는 my_main.py 이라는 값이 대신 저장된다.

지금까지는 작성한 모듈과 실행하고 있는 파이썬 파일이 같은 디렉토리 안에 존재하는 경우만 다루었다.

만약 내가 적당한 곳 (ex.바탕화면에 있는 python 폴더)에 py파일을 저장해 놓았는데, 이를 불러서 현재 디렉토리 내에서 사용하려면 어떻게 해야할까?

1
2
>>> import sys
>>> sys.path.append("C:\\Users\\JEONGWOOK\\python")

sys.path는 파이썬 라이브러리들이 설치되어 있는 디렉토리를 list 자료형으로 가지고 있다.

여기다가 우리는 list 자료형 다루기에서 언급하였던 append()함수를 사용하여 요소를 추가하면 된다.

파이썬 모듈의 경로를 입력할 때, \" " 안에서 인식되게 하기 위하여 \\ 이렇게 두 번 입력했음에 유의하자.

패키지 (package)는 모듈들을 묶어놓은 것으로, 폴더 형태로 생각하면 된다.

1
2
3
4
5
6
7
8
9
10
root_package/
__init__.py
sub_package_1/
__init__.py
module1.py
module2.py
sub_package_2/
__init__.py
module3.py
module4.py

위 구조를 예시로 살펴보면, root_package안에 sub_package_1sub_package_2가 있고 각각의 디렉토리 안에 모듈들이 들어 있다.

패키지 안의 모듈을 사용하려면 루트 디렉토리부터 경로를 적어주면 된다.

import root_package.sub_package_1.module1

패키지의 경우 보통 많은 개발자들이 참여하는 복잡한 프로젝트의 경우에 사용한다.

그러므로 조금 더 자세한 내용을 보려면 여기를 클릭하자.