파이썬 패키지(Package)는 관련 모듈들을 디렉토리 구조로 조직화한 것이다. 패키지는 모듈들을 계층적으로 구성하여, 코드의 구조를 체계적으로 만들고 관리하기 쉽게 해준다. 패키지를 사용하면 네임스페이스를 구분할 수 있어, 동일한 이름의 모듈들이 서로 충돌하지 않게 된다.
패키지 구조
파이썬 패키지는 디렉토리 형태로 구성되며, 패키지의 각 디렉토리는 __init__.py 파일을 포함해야 한다. __init__.py 파일은 해당 디렉토리를 패키지로 인식하게 하는 역할을 한다. 이 파일은 비워둘 수 있지만, 패키지 초기화 코드나 하위 모듈을 포함할 수 있다.
예제 패키지 구조
my_package/
│
├── __init__.py
├── module1.py
└── sub_package/
├── __init__.py
└── module2.py
위 구조에서 my_package는 패키지이고, sub_package는 my_package의 하위 패키지이다. module1.py와 module2.py는 각각의 패키지에 속한 모듈들이다.
패키지 및 모듈 임포트
패키지 및 모듈을 임포트하는 방법은 다음과 같다.
모듈 임포트
import my_package.module1
my_package.module1.some_function()
하위 패키지 모듈 임포트
import my_package.sub_package.module2 my_package.sub_package.module2.another_function()
init.py 파일 활용
__init__.py 파일은 패키지를 초기화하거나, 패키지 내 모듈을 편리하게 임포트할 수 있도록 설정하는 데 사용된다.
# my_package/__init__.py
from .module1 import some_function
이렇게 설정하면, 다음과 같이 패키지를 임포트하고 함수에 접근할 수 있다.
from my_package import some_function
some_function()
예제 패키지 작성
예제로 만들어볼 패키지 구조는 다음과 같다.
math_package/
│
├── __init__.py
├── basic_operations.py
└── advanced_operations.py
basic_operations.py
def add(a, b):
return a + b
def subtract(a, b):
return a - b
advanced_operations.py
def square(a):
return a * a
def cube(a):
return a * a * a
__init__.py
from .basic_operations import add, subtract
from .advanced_operations import square, cube
이제 패키지를 사용해보자.
from math_package import add, subtract, square, cube
print(add(3, 5)) # 8
print(subtract(10, 4)) # 6
print(square(3)) # 9
print(cube(2)) # 8