본문 바로가기
-----ETC2-----/Python

[Python] Week 16: 패키지

by cogito21_python 2024. 6. 1.
반응형

Day 1: 패키지의 기본 개념

  • 강의 내용:
    • 패키지의 정의와 필요성
      • 패키지의 개념과 장점
      • 코드 조직화와 재사용성 향상
    • 패키지 구조
      • 디렉토리 구조와 __init__.py 파일
  • 실습:
    • 간단한 패키지 생성 및 사용 예제
# 패키지 구조
# mypackage/
# ├── __init__.py
# └── module1.py

# mypackage/__init__.py (빈 파일)
# mypackage/module1.py
def greet(name):
    return f"Hello, {name}!"

# 패키지 임포트 및 사용
from mypackage import module1

print(module1.greet("Alice"))  # 'Hello, Alice!'

 

Day 2: 패키지와 모듈 임포트

  • 강의 내용:
    • 패키지 임포트
      • from ... import ... 문법
      • from ... import ... as ... 문법을 사용한 별칭 지정
    • 상위 디렉토리에서 패키지 임포트
      • sys.path를 사용한 경로 추가
  • 실습:
    • 다양한 패키지 임포트 예제 작성
# 패키지 임포트 예제
from mypackage import module1
print(module1.greet("Bob"))  # 'Hello, Bob!'

# 별칭을 사용한 패키지 임포트
from mypackage import module1 as mod1
print(mod1.greet("Charlie"))  # 'Hello, Charlie!'

# 상위 디렉토리에서 패키지 임포트
import sys
sys.path.append('/path/to/parent_directory')
from mypackage import module1
print(module1.greet("Dave"))  # 'Hello, Dave!'

 

Day 3: __init__.py 파일

  • 강의 내용:
    • __init__.py 파일의 역할
      • 패키지를 디렉토리로 인식시키기
      • 패키지 초기화 코드 포함
    • __init__.py 파일의 활용 예제
  • 실습:
    • __init__.py 파일을 사용한 패키지 예제 작성
# mypackage/__init__.py
print("mypackage 패키지가 임포트되었습니다.")

# mypackage/module1.py
def greet(name):
    return f"Hello, {name}!"

# 패키지 임포트 및 사용
import mypackage
from mypackage import module1

print(module1.greet("Eve"))  # 'Hello, Eve!'

 

Day 4: 하위 패키지

  • 강의 내용:
    • 하위 패키지의 개념
      • 하위 패키지 생성 및 구조
      • 하위 패키지 임포트
    • 하위 패키지 사용 예제
  • 실습:
    • 하위 패키지를 사용한 예제 작성
# 패키지 구조
# mypackage/
# ├── __init__.py
# ├── module1.py
# └── subpackage/
#     ├── __init__.py
#     └── module2.py

# mypackage/subpackage/__init__.py (빈 파일)
# mypackage/subpackage/module2.py
def farewell(name):
    return f"Goodbye, {name}!"

# 패키지 임포트 및 사용
from mypackage import module1
from mypackage.subpackage import module2

print(module1.greet("Frank"))  # 'Hello, Frank!'
print(module2.farewell("Frank"))  # 'Goodbye, Frank!'

 

Day 5: 상대 경로 임포트

  • 강의 내용:
    • 상대 경로 임포트의 개념
      • 상대 경로를 사용한 모듈 임포트
      • .과 ..을 사용한 상대 경로
    • 상대 경로 임포트 사용 예제
  • 실습:
    • 상대 경로를 사용한 모듈 임포트 예제 작성
# mypackage/module1.py
from .subpackage import module2

def greet_and_farewell(name):
    greeting = greet(name)
    farewell = module2.farewell(name)
    return f"{greeting} {farewell}"

# 패키지 임포트 및 사용
from mypackage import module1

print(module1.greet_and_farewell("Grace"))  # 'Hello, Grace! Goodbye, Grace!'

 

Day 6: 패키지 배포

  • 강의 내용:
    • 패키지 배포의 개념
      • 패키지 배포를 위한 준비
      • setup.py 파일 작성
    • 패키지 배포 과정
      • 패키지 배포를 위한 도구 (setuptools, wheel)
      • 패키지 배포 및 설치
  • 실습:
    • 간단한 패키지 배포 예제 작성
# setup.py 파일 작성
from setuptools import setup, find_packages

setup(
    name="mypackage",
    version="0.1",
    packages=find_packages(),
)

# 패키지 배포
# 터미널에서 실행:
# python setup.py sdist bdist_wheel

# 패키지 설치
# 터미널에서 실행:
# pip install mypackage-0.1-py3-none-any.whl

 

Day 7: 패키지 종합 연습 및 프로젝트

  • 강의 내용:
    • 패키지 종합 연습 문제 풀이
      • 다양한 패키지 관련 문제
      • Q&A 세션
    • 미니 프로젝트
      • 주제 선정 및 프로그램 설계
      • 패키지를 활용한 프로그램 구현 및 테스트
  • 실습:
    • 종합 연습 문제 풀기
    • 미니 프로젝트 작성 및 발표
# 연습 문제 1: 간단한 수학 패키지 작성
# mathpackage/__init__.py (빈 파일)
# mathpackage/operations.py
def add(a, b):
    return a + b

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

# main.py
from mathpackage import operations
print(operations.add(3, 5))  # 8
print(operations.subtract(10, 4))  # 6

# 연습 문제 2: 패키지 내에서 상대 경로를 사용한 모듈 임포트
# mypackage/module1.py
from .subpackage import module2

def greet_and_farewell(name):
    greeting = greet(name)
    farewell = module2.farewell(name)
    return f"{greeting} {farewell}"

# 미니 프로젝트 예제: 데이터 처리 패키지
# datapackage/__init__.py (빈 파일)
# datapackage/reader.py
def read_data(file_path):
    with open(file_path, "r") as file:
        return file.readlines()

# datapackage/processor.py
def process_data(data):
    return [line.strip().upper() for line in data]

# datapackage/writer.py
def write_data(file_path, data):
    with open(file_path, "w") as file:
        file.writelines(data)

# main.py
from datapackage import reader, processor, writer

data = reader.read_data("input.txt")
processed_data = processor.process_data(data)
writer.write_data("output.txt", processed_data)
print("Data processing complete.")

 

이 강의는 파이썬의 패키지를 익히는 것을 목표로 하며, 각 강의는 이론과 실습을 포함합니다. 다음 주차에 대한 상세 강의를 원하시면 말씀해 주세요!

반응형