파이썬 가이드 10 모듈과 패키지
모듈과 패키지
파이썬에서 **모듈(Module)**과 **패키지(Package)**는 코드를 체계적으로 구성하고 재사용하기 위한 핵심 개념입니다.
1. 모듈 (Module)
모듈은 파이썬 코드를 담고 있는 단일 .py 파일입니다. 모듈은 함수, 클래스, 변수 등을 정의할 수 있으며, 실행 가능한 코드도 포함할 수 있습니다.
주요 특징:
* 파일 단위: 하나의 .py 파일이 하나의 모듈이 됩니다.
* 재사용성: 다른 파이썬 프로그램에서 import 문을 사용하여 모듈의 기능을 가져와 사용할 수 있습니다.
* 이름 공간: 모듈은 자체적인 이름 공간을 가지므로, 다른 모듈과의 이름 충돌을 방지합니다.
예시:
my_module.py라는 파일에 다음과 같은 코드가 있다면:
<!-- -->
# my_module.py
def greet(name):
return f"Hello, {name}!"
my_variable = 10
다른 파일에서 이 모듈을 사용하려면 import my_module과 같이 가져온 후 my_module.greet("World")나 my_module.my_variable처럼 접근할 수 있습니다.
2. 패키지 (Package)
패키지는 관련된 여러 모듈을 하나의 디렉토리(폴더)로 묶어 관리하는 방법입니다. 패키지는 파이썬의 모듈 이름 공간을 구조화하는 방법으로, "점(.)"을 사용하여 하위 모듈에 접근합니다.
주요 특징:
* 디렉토리 구조: 패키지는 기본적으로 모듈 파일들과 다른 하위 패키지(디렉토리)를 포함하는 폴더입니다.
* __init__.py 파일: 파이썬 3.3 이전에는 디렉토리가 패키지로 인식되려면 반드시 __init__.py 파일이 포함되어야 했습니다. 이 파일은 비어있을 수도 있고, 패키지가 초기화될 때 실행될 코드를 포함할 수도 있습니다. 파이썬 3.3부터는 __init__.py 파일이 없어도 패키지로 인식되지만, 여전히 호환성과 특정 기능(예: from package import *)을 위해 사용됩니다.
* 계층적 구조: 패키지 안에 또 다른 패키지(서브 패키지)를 포함하여 더 복잡한 계층 구조를 만들 수 있습니다.
예시:
my_package/
├── __init__.py
├── module_a.py
└── sub_package/
├── __init__.py
└── module_b.py
위 구조에서 module_a.py를 가져오려면 import my_package.module_a를 사용하고, module_b.py를 가져오려면 import my_package.sub_package.module_b를 사용합니다.
3. 모듈과 패키지의 관계
- 모듈은 파일, 패키지는 폴더: 가장 간단하게는 모듈은
.py확장자를 가진 단일 파일이고, 패키지는 이러한 모듈들을 담고 있는 폴더(디렉토리)라고 생각할 수 있습니다. - 조직화: 패키지는 모듈들을 논리적으로 그룹화하여 대규모 프로젝트에서 코드의 관리와 재사용을 용이하게 합니다. "모듈이 모이면 패키지가 되고, 패키지가 모이면 라이브러리가 된다"는 비유도 있습니다.
4. 라이브러리 (Library)
"라이브러리"는 파이썬에서 공식적인 용어라기보다는 일반적으로 여러 패키지와 모듈을 포함하는 코드의 큰 묶음을 의미합니다. 예를 들어, NumPy나 Pandas와 같은 외부 라이브러리는 실제로는 여러 패키지와 모듈로 구성되어 있습니다.
5. PyPI와 pip
- PyPI (Python Package Index): 파이썬 커뮤니티가 개발하고 공유하는 소프트웨어(패키지)를 찾고 설치할 수 있는 공식 저장소입니다.
- pip: PyPI에서 파이썬 패키지를 설치하고 관리하는 데 사용되는 패키지 관리자입니다.
pip install package_name명령어를 사용하여 필요한 패키지를 쉽게 설치할 수 있습니다.
요약하자면, 모듈은 파이썬 코드의 기본 재사용 단위이며, 패키지는 이러한 모듈들을 체계적으로 조직화하여 더 크고 복잡한 애플리케이션을 개발할 수 있도록 돕는 구조입니다.