파이썬(Python)

파이썬(python) 모듈과 패키지

알통몬_ 2018. 1. 16. 12:30
반응형


공감 및 댓글은 포스팅 하는데

 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 

도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 

만들어 나가겠습니다^^

 


이번 포스팅에서는 모듈과 패키지에 대해서 공부합니다.


모듈 : 

클래스, 함수, 변수 등을 모아 놓은 .py 파일을 말합니다.

파이썬 프로그램에서 불러올 수 있게 만든 .py파일이기도 합니다.


module

지난 클래스를 공부할 때 만들었던 Calculator 클래스입니다.

이 클래스를 

Calculator.py 라는 파일로 별도로 저장했습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Calculator:
        def __init__(self):
            self.result = 0
 
        def add(self, first, second):
            self.result = first + second
            return self.result
 
        def sub(self, first, second):
            self.result = first - second
            return self.result
 
        def mul(self, first, second):
            self.result = first * second
            return self.result
 
        def div(self, first, second):
            self.result = first / second
            return self.result
 
cs

이 .py을 다른 .py 에서 사용하면 이 파일은 모듈이라고 할 수 있습니다.

다른 .py 파일을 사용하고 싶을 때는 import를 해야합니다.

1
2
3
4
5
6
7
8
9
10
11
import Calculator
cc = Calculator.Calculator()
first = 10
second = 5
= cc.add(first, second)
= cc.mul(first, second)
 
print("입력값 :", first, ",", second)
print("더하기", a)
print("곱하기", m)
 
cs


그런데 위처럼 import를 하면 모듈에 있는 변수나 함수, 

클래스를 사용할 때마다

모듈이름.클래스이름

모듈이름.함수이름

모듈이름.변수이름 처럼

사용해야 합니다.


여기서 원하는 함수나 변수, 클래스만 사용하려면

from Calculator import 함수

from Calculator import 변수

from Calculator import 클래스

처럼 사용할 수 있고,

모두 사용하고 싶을 경우

from Calculator import *

로 사용하면 됩니다.

1
2
3
4
5
6
7
8
9
10
11
from Calculator import *
cc = Calculator()
first = 10
second = 5
= cc.add(first, second)
= cc.mul(first, second)
 
print("입력값 :", first, ",", second)
print("더하기", a)
print("곱하기", m)
 
cs

더 편하게 사용 가능합니다.


모듈을 추가할 때 파이참 같은 IDE 툴이 아닌

python shell에서 추가할 경우 문제가 생깁니다.

예를 들어 모듈에 print() 함수가 포함되어 있다고 해봅시다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Calculator:
        def __init__(self):
            self.result = 0
 
        def add(self, first, second):
            self.result = first + second
            return self.result
 
        def sub(self, first, second):
            self.result = first - second
            return self.result
 
        def mul(self, first, second):
            self.result = first * second
            return self.result
 
        def div(self, first, second):
            self.result = first / second
            return self.result
 
print("모듈 생성 완료")
 
cs

모듈은 import 했을 뿐인데 

해당 파일이 실행되었습니다.

이런 경우를 방지하기 위해

1
2
    if __name__ == "__main__":
        print("모듈 생성 완료")
cs

이렇게 if __name__ == "__main__:

조건문 안에 print() 함수를 넣으면 import 시 실행이 되지 않습니다.


패키지 :

.(도트) 를 사용해서 파이썬 모듈을 디렉토리 구조로(계층적인 구조로)

관리할 수 있게 해줍니다.

다른 언어를 접해보신 분들을 잘 아실거라 생각됩니다.

하나의 디렉토리에 수십 수백 개의 모듈을 관리하면 너무 난잡해 보일 수 있습니다.

그래서 서브 디렉토리들을 만들어서 관련된, 유사한 모듈끼리 모아 놓을 수 있습니다.

패키지를 사용하면, 모듈을 관리하기 편해지고, 유지보수 또한 편해집니다.

main 이라는 최상위 디렉토리 하위에 sub1, sub2 디렉토리를 만들고

각 디렉토리 아래에 sub1, sub2 모듈을 만들었습니다.

그리고 각 디렉토리에는 __init__.py 라는

파일을 만들어주는 것이 좋습니다.

3.3버전부터는 이 파일이 없어도 패키지로 인식되지만

하위 버전에서는 디록토리에 __init__.py 파일이 없으면,

같은 패키지로 인식하지 못해 에러가 발생할 수 있기 때문에

하위 버전과의 호환성을 위해 만들어주는 것이 좋습니다.


이상입니다.

감사합니다.

반응형