Python - 10. 모듈과 패키지
2025. 1. 19. 22:06ㆍ프로그래밍 언어/Python
Python에서 모듈과 패키지는 코드의 재사용성을 높이고, 관리와 유지보수를 용이하게 하기 위한 필수적인 구성 요소입니다. 이번 섹션에서는 모듈과 패키지의 정의 및 사용법, 가상환경과 패키지 관리 방법을 다룹니다.
10.1 모듈의 정의와 사용
모듈이란?
모듈(Module)은 Python 코드가 저장된 파일로, 함수, 클래스, 변수 등을 정의하거나 실행 코드를 포함할 수 있습니다. 모듈은 .py 확장자로 저장됩니다.
모듈 생성과 사용
- 모듈 생성
- mymodule.py 파일을 생성합니다.
# mymodule.py
def greet(name):
return f"Hello, {name}!"
PI = 3.14159
if __name__ == "__main__":
print(greet("Test")) # 모듈이 독립적으로 실행될 때만 실행됩니다.
- 모듈 가져오기
- import 키워드를 사용해 모듈을 가져옵니다.
import mymodule
print(mymodule.greet("Alice")) # Hello, Alice!
print(mymodule.PI) # 3.14159
- 모듈 검색 경로
- Python은 모듈을 sys.path에 정의된 경로에서 검색합니다.
import sys
print(sys.path) # 모듈 검색 경로 출력
- 순환 임포트 문제
- 두 모듈이 서로를 임포트할 때 발생하는 문제입니다. 해결 방법으로는 모듈의 구조를 재설계하거나 import 문을 함수 내부에 배치합니다.
# 모듈 A
# from module_b import func # 순환 임포트 발생
def func_a():
from module_b import func
func()
10.2 패키지 구조와 __init__.py
패키지란?
패키지(Package)는 여러 모듈을 디렉터리 구조로 묶어 관리하는 단위입니다. 패키지는 디렉터리 내부에 __init__.py 파일을 포함하여 Python 패키지로 인식됩니다.
패키지 구조 예제
myproject/
mypackage/
__init__.py
module1.py
module2.py
- __init__.py: 패키지 초기화 파일로, 패키지를 초기화하거나 서브모듈을 설정하는 데 사용됩니다.
상대 임포트 vs 절대 임포트
- 절대 임포트: 프로젝트의 루트 경로에서 시작하는 전체 경로를 사용합니다.
from mypackage.module1 import func1
- 상대 임포트: 현재 위치를 기준으로 상대적인 경로를 사용합니다. .은 현재 디렉터리, ..은 상위 디렉터리를 나타냅니다.
from .module1 import func1
네임스페이스 패키지
Python 3.3 이상에서는 __init__.py 없이도 패키지를 만들 수 있습니다. 이를 네임스페이스 패키지라고 합니다. 여러 디렉터리에 걸쳐 있는 패키지를 하나로 결합할 때 유용합니다.
setup.py 사용법
setup.py는 패키지를 배포할 때 사용됩니다.
from setuptools import setup, find_packages
setup(
name="mypackage",
version="0.1",
packages=find_packages(),
install_requires=[
"requests",
"numpy"
],
)
10.3 가상환경과 패키지 관리
가상환경이란?
가상환경(Virtual Environment)은 프로젝트별로 독립적인 Python 환경을 제공하여, 패키지 충돌을 방지하고 관리합니다.
가상환경 생성과 활성화
- 가상환경 생성
python -m venv myenv
- 가상환경 활성화
- Windows:
myenv\Scripts\activate
- macOS/Linux:
source myenv/bin/activate
- 가상환경 비활성화
deactivate
현대적 도구 소개
- pipenv
- 가상환경과 의존성 관리를 통합적으로 관리할 수 있는 도구입니다.
pip install pipenv
pipenv install requests
pipenv shell
- poetry
- 패키지 관리와 빌드 시스템을 제공하는 현대적인 도구입니다.
pip install poetry
poetry init
poetry add requests
poetry shell
의존성 관리 모범 사례
- requirements.txt 사용
- 프로젝트의 의존성을 명확히 기록합니다.
pip freeze > requirements.txt
pip install -r requirements.txt
- 의존성 잠금
- pipenv나 poetry를 사용하여 의존성 버전을 잠급니다.
- 환경 분리
- 개발, 테스트, 프로덕션 환경에서 서로 다른 의존성을 사용할 수 있도록 분리합니다.
가상환경 Best Practices
- 각 프로젝트마다 가상환경을 생성합니다.
- 의존성을 명확히 정의하고, 불필요한 패키지 설치를 피합니다.
- requirements.txt나 poetry.lock 파일로 의존성을 관리합니다.
이번 섹션에서는 Python의 모듈과 패키지 사용법, 패키지 구조, 가상환경 및 패키지 관리 방법을 배웠습니다.
'프로그래밍 언어 > Python' 카테고리의 다른 글
Python Tkinter - 1. 소개와 기본 위젯 (0) | 2025.01.20 |
---|---|
Python - 11. 내장 함수와 표준 라이브러리 (0) | 2025.01.19 |
Python - 9. 객체 지향 프로그래밍 (0) | 2025.01.19 |
Python - 8. 예외 처리 (0) | 2025.01.19 |
Python - 7. 파일 입출력 (0) | 2025.01.19 |