1 minute read

1. 패키지란 무엇인가?

패키지는 여러 모듈을 계층적인 파일 구조로 구성한 것입니다. 패키지를 사용하면 대규모 프로젝트에서 코드를 더 효율적으로 구조화하고 관리할 수 있습니다. 패키지는 관련된 모듈들을 그룹화하여 이름 충돌을 방지하고 코드의 구조를 더 명확하게 만듭니다.

2. 파이썬 패키지의 구조

파이썬 패키지의 기본 구조는 다음과 같습니다:

my_package/
    __init__.py
    module1.py
    module2.py
    subpackage/
        __init__.py
        module3.py
        module4.py
  • my_package는 최상위 패키지 디렉토리입니다.
  • __init__.py 파일은 해당 디렉토리가 패키지임을 나타냅니다.
  • module1.py, module2.py 등은 패키지 내의 모듈들입니다.
  • subpackage는 하위 패키지입니다.

3. 패키지 만들기

  1. 패키지로 사용할 디렉토리를 생성합니다.
  2. 패키지 디렉토리 안에 __init__.py 파일을 생성합니다. (Python 3.3+ 버전에서는 선택사항이지만, 하위 호환성을 위해 생성하는 것이 좋습니다)
  3. 필요한 모듈 파일들을 생성합니다.

예를 들어, 다음과 같은 구조의 math_operations 패키지를 만들어 봅시다:

math_operations/
    __init__.py
    basic_ops.py
    advanced_ops.py

basic_ops.py:

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

def subtract(a, b):
    return a - b

advanced_ops.py:

import math

def square_root(x):
    return math.sqrt(x)

def power(base, exponent):
    return base ** exponent

__init__.py:

from .basic_ops import add, subtract
from .advanced_ops import square_root, power

4. 패키지 안의 함수 사용하기

패키지 안의 함수를 사용하는 방법은 여러 가지가 있습니다:

  1. 전체 패키지 임포트:
     import math_operations
    
     result = math_operations.basic_ops.add(5, 3)
     print(result)  # 출력: 8
    
  2. 특정 모듈 임포트:
     from math_operations import basic_ops
    
     result = basic_ops.subtract(10, 7)
     print(result)  # 출력: 3
    
  3. 특정 함수 임포트:
     from math_operations.advanced_ops import square_root
    
     result = square_root(16)
     print(result)  # 출력: 4.0
    
  4. __init__.py에 정의된 함수 직접 임포트:
     from math_operations import add, power
    
     print(add(2, 3))  # 출력: 5
     print(power(2, 3))  # 출력: 8
    

5. __init__.py

__init__.py 파일은 패키지를 초기화하는 역할을 합니다. 이 파일이 없으면 해당 디렉토리는 패키지로 인식되지 않습니다. __init__.py 파일은 패키지 내의 모듈을 불러오거나 초기화 코드를 작성하는 데 사용됩니다.

# math_operations/__init__.py

from .basic_ops import add, subtract
from .advanced_ops import square_root, power

print("math_operations 패키지가 초기화되었습니다.")

__init__.py 파일이 실행될 때, 패키지의 초기화 코드가 실행됩니다.

6. __all__

__all__ 리스트는 from package import * 구문을 사용할 때 어떤 모듈이나 이름을 가져올지 명시적으로 정의합니다. __init__.py 파일에 정의하여 사용합니다.

# __init__.py
__all__ = ['basic_ops', 'advanced_ops']

from . import basic_ops
from . import advanced_ops

이렇게 하면 from math_operations import *를 사용할 때 basic_opsadvanced_ops 모듈만 임포트됩니다.

__all__을 사용하면 패키지에서 공개하고자 하는 모듈이나 이름을 명확히 제어할 수 있으며, 의도치 않은 이름 공개를 방지할 수 있습니다.

Leave a comment