Python

Python_06_모듈&패키지

5_ssssseung 2021. 4. 9. 22:46

모듈 & 패키지

1. 모듈(Module)

파일 단위의 코드 재사용

  • 모듈(Module)
  • 패키지(Package)
  • 라이브러리(Library)
용어 정의
모듈 특정 기능을 .py 파일 단위로 작성한 것.
패키지 특정 기능과 관련된 여러 모듈들의 집합. 패키지 안에는 또다른 서브 패키지를 포함 할수도 있음.
파이썬 표준 라이브러리 파이썬에 기본적으로 설치된 모듈과 내장 함수를 묶어서 파이썬 표준 라이브러리 (Python Standard Library, PSL) 라 불림.
패키지 관리자(pip) PyPI 에 저장된 외부 패키지들을 설치하도록 도와주는 패키지.

 

1.1 모듈(Module)?

모듈(module)은 특정 기능을 하는 코드를 담고 있는 파일(또는 스크립트)입니다.

1.2 모듈 생성

  • jupyter notebook 파일트리화면에서 New > Text File
  • 파일의 이름을 check.py 로 저장
# 빈번히 활용되는 짝수 홀수 판별식을 작성해봅시다.
# check.py
def odd(n):    
	return bool(n % 2)

def even(n):    
	return not bool(n % 2)

1.3 모듈 활용

import

  • 모듈을 활용하기 위해서는 반드시 import문을 통해 내장 모듈을 이름 공간으로 가져와야합니다.
# import를 이용하여 check.py를 가져옵니다.
import check

# 우리가 만든 odd, even 함수를 확인할 수 있습니다.
print(dir(check))
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'even', 'odd']
# 함수를 활용해봅시다.
print(check.odd(10)) # False
print(check.even(10)) # True
# 함수를 자주 사용할거라면, 변수에 할당해서 사용할 수도 있습니다.
check_odd = check.oddcheck_odd(10) # False
map(check_odd, list(filter(check_odd, range(1, 11)))
# [1, 3, 5, 7, 9]

2. 패키지(Package)

패키지(pakcage)는 점(.)으로 구분된 모듈 이름(package.module) 을 써서 모듈을 구조화하는 방법입니다.

2.1 패키지 생성

  • jupyter notebook 파일트리화면에서 New > Folder
  • 다음과 같은 폴더구조 생성
my_package/
  __init__.py
  math/
    __init__.py
    tools.py  

모듈 이름 my_package.math는 my_package라는 이름의 패키지에 있는 math라는 이름의 하위 패키지를 가리킵니다.

  • __init__.py? > python3.3 버전부터는 __init__.py 파일이 없어도 패키지로 인식합니다(PEP 420). 하지만 하위 버전 호환 및 일부 프레임워크에서의 올바른 동작을 위해 __init__.py 파일을 생성하는 것이 권장됩니다.
# my_package/__init__.py
# 모든 __init__.py 파일은 비워둡니다.
# my_package/math/__init__.py
# 모든 __init__.py 파일은 비워둡니다.
my_package/math/tools.py

pi = 3.14159265358979323846
e = 2.71828182845904523536def 

my_max(a, b):    
if a > b:        
	return a    
else:        
	return b
  1. [연습] 패키지 만들기

my_package 패키지 내부에 statistics 패키지를 만들고, tools.py 모듈 생성 후, 아래의 표준편차 함수 standard_deviation()를 추가해보세요.

  1. [폴더구조]
my_package/
  __init__.py
  math/        
    __init__.py
    tools.py
  statistics/
    __init__.py
    tools.py
  1. standard_deviation() 함수
def standard_deviation(values):    
	mean = sum(values) / len(values)    
	sum_var = sum(pow(value - mean, 2) 

	for value in values) / len(values)    
		std_dev = math.sqrt(sum_var)   
 
	return std_dev

2.2 패키지 활용

  • 모듈과 동일하게 fromimport 키워드를 통해 코드를 가져와(import) 활용한다.

(1) from 패키지 import 모듈

importfrom과 함께 다양한 방법으로 활용할 수 있습니다.

# math 패키지의 tools 모듈을 추가해봅시다.
# math 패키지의 tools 모듈을 추가해봅시다.
from my_package.math import tools
print(tools.e) # 2.718281828459045
print(tools.pi) # 3.141592653589793

(2) from 패키지.모듈 import 데이터

특정한 함수 혹은 어트리뷰트만 활용하고 싶을 때, 아래와 같이 작성합니다.

# 특정한 데이터 혹은 함수만 활용하고 싶을 때, 아래와 같이 작성합니다. 모듈 내부의 자연상수 e를 간단하게 출력해봅시다
from my_package.math.tools import e
print(e) # 2.718281828459045

(3) from 모듈 import *

해당하는 모듈 내의 모든 변수, 함수, 클래스를 가져옵니다.

# math 패키지내부의 tools 모듈에서 모든 변수와 함수를 가져와봅시다.
from my_package.math.tools import *
print(pi) # 3.141592653589793
print(my_max(5, 2)) # 5 

(4) from 모듈 import 데이터 as 별명

내가 지정하는 이름을 붙여 가져올 수 있습니다.

# statistics 패키지 tools 모듈에 정의한 standard_deviation 함수를 짧은 이름(sd)으로 줄여 활용해봅시다.
from my_package.statistics.tools import standard_deviation as sd
sd([1,2,3,4,5]) # 1.4142135623730951

<정리>

  • 모듈
import modulefrom module import var, function, Classfrom module import *
  • 패키지
from package import modulefrom package.module import var, function, Class

'Python' 카테고리의 다른 글

Python_07_OOP  (0) 2021.04.13
Python_05_데이터_구조  (0) 2021.04.07
Python_04_예외처리  (0) 2021.04.06
Python_03_함수  (0) 2021.04.05
Python_02_제어문  (0) 2021.04.04