뮤트 개발일지

[파이썬 코딩 도장] Unit 45. 모듈과 패키지 만들기 본문

코딩도장

[파이썬 코딩 도장] Unit 45. 모듈과 패키지 만들기

박뮤트 2022. 1. 5. 06:37

모듈 만들기

모듈 안에 있는 함수 사용하기

base = 2          # 변수
 
def square(n):    # 함수
    return base ** n

square2.py 라는 이름으로 저장

방법 1)

import square2               # import로 square2 모듈을 가져옴
 
print(square2.base)          # 모듈.변수 형식으로 모듈의 변수 사용
print(square2.square(10))    # 모듈.함수() 형식으로 모듈의 함수 사용
2
1024

방법2) from import 방식으로 모듈이름을 붙이지 않고 사용하기

>>> from square2 import base, square
>>> print(base)
2
>>> square(10)
1024

 

모듈 안에 있는 클래스 사용하기

class Person:    # 클래스
    def __init__(self, name, age, address):
        self.name = name
        self.age = age
        self.address = address
 
    def greeting(self):
        print('안녕하세요. 저는 {0}입니다.'.format(self.name))

Person.py 라고 저장

방법 1)

import person    # import로 person 모듈을 가져옴
 
# 모듈.클래스()로 person 모듈의 클래스 사용
maria = person.Person('마리아', 20, '서울시 서초구 반포동')
maria.greeting()
안녕하세요. 저는 마리아입니다.

방법 2) from import로 모듈명 없이 클래스 사용하기

>>> from person import Person
>>> maria = Person('마리아', 20, '서울시 서초구 반포동')
>>> maria.greeting()
안녕하세요. 저는 마리아입니다.

모듈과 시작점 알아보기

__name__: 현재 실행되는 파일의 명이 들어간다. 모듈로 불러온 것이 아닌 직접 실행하는 파일의 경우 __main__가 들어간다.

 

순서 살펴보기

1. hello.py라는 파일에 코드 저장

2. main.py에 hello.py import

hello.py

print('hello 모듈 시작')
print('hello.py __name__:', __name__)    # __name__ 변수 출력
print('hello 모듈 끝')

main.py

import hello    # hello 모듈을 가져옴
 
print('main.py __name__:', __name__)    # __name__ 변수 출력
hello 모듈 시작
hello.py __name__: hello
hello 모듈 끝
main.py __name__: __main__

hello.py를 모듈이 아닌 직접 실행하는 경우 __name__에 __main_이 들어간다.

C:\project>python hello.py
hello 모듈 시작
hello.py __name__: __main__
hello 모듈 끝

패키지 만들기

폴더 안에 __init__.py 만들기

이 파일이 있는 폴더는 패키지로 인식한다. python3.3 이상부터는 이 파일이 없어도 패키지로 인식하지만 하위 버전에서는 인식이 안된다.

 

operation.py

def add(a, b):
    return a + b
 
def mul(a, b):
    return a * b

main.py에서 불러와 실행시키기

방법 1)

import calcpkg.operation    # calcpkg 패키지의 operation 모듈을 가져옴
 
print(calcpkg.operation.add(10, 20))    # operation 모듈의 add 함수 사용
print(calcpkg.operation.mul(10, 20))    # operation 모듈의 mul 함수 사용
30
200

방법 2) from import로 패키지, 모듈 이름 없이 사용하기

- from 패키지.모듈 import 변수

- from 패키지.모듈 import 함수

- from 패키지.모듈 import 클래스

>>> from calcpkg.operation import add, mul
>>> add(10, 20)
30
>>> mul(10, 20)
200

패키지에서 from import 응용하기

import 패키지 형식으로 패키지만 가져와서 모듈 사용하기

1. __init__.py 파일에 모듈 import하기

__init__.py

from . import operation    # 현재 패키지에서 operation 모듈을 가져옴

(.점은 현재 패키지라는 의미)

2. main.py 에서 실행시키기

main.py

import calcpkg    # calcpkg 패키지만 가져옴
 
print(calcpkg.operation.add(10, 20))    # operation 모듈의 add 함수 사용
print(calcpkg.operation.mul(10, 20))    # operation 모듈의 mul 함수 사용
30
200

패키지.모듈.함수()로 사용

 

form import로 사용하기

main.py

from calcpkg import *    # calcpkg 패키지의 모든 변수, 함수, 클래스를 가져옴
 
print(add(10, 20))    # operation 모듈의 add 함수 사용
print(mul(10, 20))    # operation 모듈의 mul 함수 사용
Traceback (most recent call last):
  File "C:\project\main.py", line 3, in <module>
    print(add(10, 20))    # operation 모듈의 add 함수 사용
NameError: name 'add' is not defined

__init__.py에서 모듈만 가져왔을 뿐 모듈 안의 함수는 가져오지 않았기 때문에 에러발생, 이 때는 __init__.py에서 모듈 안의 함수를 가져오게 해야한다. 

- from .모듈 import 변수, 함수, 클래스

__init__.py

# 현재 패키지의 operation 모듈에서 각 함수를 가져옴
from .operation import add, mul
from .operation import *    # 현재 패키지의 operation 모듈에서 모든 변수, 함수, 클래스를 가져옴

main.py

import calcpkg    # calcpkg 패키지만 가져옴
 
print(calcpkg.add(10, 20))   # 패키지.함수 형식으로 operation 모듈의 add 함수 사용
print(calcpkg.mul(10, 20))   # 패키지.함수 형식으로 operation 모듈의 mul 함수 사용
30
200

 

__all__로 필요한 것만 공개하기

__init__.py

__all__ = ['add']    # calcpkg 패키지에서 add 함수만 공개
 
from .operation import *    # 현재 패키지의 operation 모듈에서 모든 변수, 함수, 클래스를 가져옴

main.py

from calcpkg import *    # calcpkg 패키지의 모든 변수, 함수, 클래스를 가져옴
 
print(add(10, 20))    # add 함수는 공개되어 있으므로 사용할 수 있음
print(mul(10, 20))    # 에러: mul 함수는 공개되어 있지 않으므로 사용할 수 없음