[Python] 5. 모듈과 패키지

1. 모듈(Module)

 

파이썬의 모듈은 파이썬 코드 파일로, 함수, 클래스, 변수 등을 포함할 수 있는 독립적인 코드 블록으로, 모듈을 사용하면 코드의 재사용성을 높이고, 관련된 기능을 그룹화할 수 있습니다. 모듈은 단순히 파이썬 파일(.py)로 생성됩니다.

def greet(name):
    return f"Hello, ${name}!"

PI = 3.14159

 

모듈을 사용하려면 import 문을 사용해 모듈을 가져와야합니다.

import module;

print(module.greet("JackSon")) # Hello, JackSon
print(module.PI) # 3.14159

 

전체 모듈을 가져오고 모듈의 특정 함수 또는 변수를 가져오거나 모듈의 이름을 가져올 수 있습니다.

  • 전체 모듈 가져오기
import module
  • 모듈의 특정 함수 또는 변수 가져오기:
from module import greet
print(greet("King")) # Hello, King!!
  • 모듈의 이름 변경해 가져오기:
import module as mm
print (mm.greet("Chain")) # Hello, Chain

2. 패키지(Package)

패키지는 여러 모듈을 포함하는 디렉토리로, 관련된 모듈들을 그룹화해 관리할 수 있습니다. 패기지는 __init__.py라는 파일을 포함하여, 이 파일이 있는 디렉토리 패키지로 인식됩니다.

mypackage/
   __init__.py
   module1.py
   module2.py
  • __init__.py: 패키지가 초기화될 때 실행되는 코드가 포함될 수 있고, 비워둘 수 있음
  • module1.py, module2.py: 각각의 모듈 파일
# mypackage/module1.py
def func1():
    return "Function 1 from Module 1"

# mypackage/module2.py
def func2():
    return "Function 2 from Module 2"

 

패키지를 사용하려면 모듈을 가져오는 것과 유사한 방식입니다.

# main.py
from mypackage import module1, module2

print(module1.func1()) # Function 1 from Module 1
print(module2.func2()) # Function 2 from Module 2

 

패키지 안에 다른 패키지를 만들 수 있습니다. 예를 들어 다음과 같은 폴더 구조를 가집니다.

mypackage/
   __init__.py
   subpackage/
      __init__.py
      submodule.py

 

이 경우, 서브 패키지의 모듈을 가져오는 방법은 다음과 같습니다. 우선 서브 모듈을 작성해보겠습니다. submodule.py에 다음 코드를 입력해 함수를 추가해줍니다.

# mypackage/subpackage/submodule.py
def sub_function():
    return "Hello from submodule!"

 

서브패키지를 가져오기 위한 방법은 여러가지가 있습니다.

  • 전체 서브패키지 가져오기
# main.py

from mypackage import module1, module2
from mypackage.subpackage import submodule


print(module1.func1()) # Function 1 from Module 1
print(module2.func2()) # Function 2 from Module 2

print(submodule.sub_function()) # Hello from submodule!
  • 서브모듈의 특정 함수 가져오기
# mypackage/subpackage/submodule.py
def sub_function():
    return "Hello from submodule!"

def sub_thank():
    return "Thank you!"
    
# main.py
from mypackage.subpackage.submodule import sub_thank

print(sub_thank()) # Thank you!
  • 패키지 전체 불러오기

서브패키지를 포함한 패키지 전체를 가져올 수 있습니다.

# mypackage/__init__.py
from .module1 import *
from .subpackage import submodule

# main.py
import mypackage

print(mypackage.submodule.sub_function()) # Hello from submodule!
  • 서브패키지의 서브패키지 가져오기

서브패키지 안에 또다른 서브패키지가 있을 경우 같은 방식으로 가져올 수 있습니다. 

mypackage/
    ├── subpackage/
    │   └── subsubpackage/
    │       ├── __init__.py
    │       └── subsubmodule.py

 

이 경우, subsubmodule.py를 다음과 같이 가져올 수 있습니다.

# main.py
from mypackage.subpackage.subsubpackage import subsubmodule

print(subsubmodule.sub_thank()) # Thank you
print(subsubmodule.sub_hello()) # Hello from subsubmodule

# subsubmodule.py
def sub_hello():
    return "Hello from subsubmodule!"

def sub_thank():
    return "Thank you!"

 

 

GitHub - Koras02/python-blog

Contribute to Koras02/python-blog development by creating an account on GitHub.

github.com

 

LIST