모듈의 개념
모듈
- 파이썬의 함수, 클래스 등의 정의와 변수와 실행문 등을 저장한 파일
- 모듈 이름 = 파일명 (모듈은 파일 단위)
- 자주 사용하는 코드들을 묶어 따로 파일로 저장해 사용
패키지
- 특정 기능관 연관된 모듈의 모음
- __init__.py 파일을 갖고 있고, python3.3 버전부터 없어도 인식되지만 하위 버전과의 호환을 위해 생성하는 것이 안전함
라이브러리
- 특정 기능과 연관된 패키지의 모음
- 파이썬에서는 패키지와 라이브러리가 개념적으로 차이 없이 쓰임
프레임워크
- 애플리케이션의 기능을 수행하기 위해 설계한 데이터 흐름과 구조를 갖는 모듈과 패키지의 모음
ex. Django, Flask, FastAPI 등
모듈의 유형
실행문만 있는 모듈
- 일반적으로 메인 모듈로 사용하기 위해 만든 모듈
# hello.py
print("hello 모듈입니다")
print("Hello World")
# insa.py
import hello
# insa.py 파일 실행 결과
# hello 모듈입니다
# Hello World
함수, 클래스 정의만 있는 모듈
- 함수나 클래스 등의 정의만 있는 모듈 파일
# hello_func.py
def hello():
print("hello_func 모듈")
print("__name__ : ", __name__) # __name__ : hello_func 출력됨
# insa_func.py
import hello_func
# main 함수
def main():
print("insa 모듈")
print("__name__ : ", __name__) # __name__ : __main__ 출력됨
hello_func.hello()
# main 실행
main()
# 실행 결과
# insa 모듈
# __name__ : __main__
# hello_func 모듈
# __name__ : hello_func
실행문과 함수, 클래스 정의가 같이 있는 모듈
- 실행문과 함수, 클래스 정의가 같이 있는 모듈 파일
# gugudan.py
def gugudan(n):
print("{}단을 출력합니다".format(n))
for i in range(1, 10):
print(n, "x", i, "=", n*i)
if __name__ = "__main__":
gugudan(3)
# gugudan_main.py
import gugudan
def main():
for i in range(2, 10):
print("=" * 20)
gugudan.gugudan(i)
if __name__ = "__main__":
main()
# 메인 모듈로 실행될 경우 __name__ 내장 변수가 __main__으로 설정됨
gugudan.py의 gugudan(3)처럼 모듈로 실행되지 않고 임포트되어 실행될 때 실행되면 안 되는 코드가 있으면 __name__ 변수 값을 이용하여 처리하도록 작성
모듈 정의하기
모듈 만들고 이름 붙이기
- 파이썬 코드를 파일로 저장하면 모듈이 되는데, 모듈의 이름은 파일명을 따라간다
모듈명
- 대소문자 모두 사용해 모듈명 정의할 수 있지만 가급적 짧은 소문자로 된 이름을 사용
ex. hello, main, greeting, user, hello_world, user_input 등
# 피해야 하는 이름 : Hello, Main, Greeting, User, HelloWorld, UserInput 등
실행문만 있는 모듈
- 코드 그대로 가져와 쓰는 경우를 제외하고는 재활용하기 곤란하다
함수가 있는 모듈
- 실행문을 재사용 할 수 있도록 함수로 만들어 정의하고, 메인 모듈로 실행할 때만 실행문이 실행되도록 작성
스크립트로 실행한 모듈에서 인자 값 얻기
- 모듈을 스크립트로 실행할 때 옵션을 인자 값으로 받아와 사용 가능
- argv 변수에 넘겨진 인자 값 저장
- sys 모듈을 임포트해서 argv 리스트 변수를 참조하여 사용 (argv 리스트의 첫 번째 항목은 실행한 파일명)
// area.py
import sys
def tri_area(width, height):
return width * height * 1/2
def box_area(width, height):
reutnr width * height
def print_area(width, height):
print("가로", width, "세로", height, "인 삼각형의 넓이 :", tri_area(width, height))
print("가로", width, "세로", height, "인 사각형의 넓이 :", box_area(width, height))
if __name__ = "__main__":
if len(sys.argv) == 3:
print_area(int(sys.argv[1]), int(sys.argv[2]))
else:
print("사용법 : python area.py 가로 세로")
모듈 사용하기
모듈 임포트하기
- import 문을 사용하여 모듈을 불러온 뒤, 모듈 이름 뒤에 '.'을 붙이고 모듈 안의 함수나 클래스를 참조해서 사용
# main_exit.py
import sys
while True:
print("종료하려면 exit를 입력하세요")
user_input = input(">> ")
if user_input == "exit":
sys.exit() # 프로그램 종료
모듈의 특정 함수나 클래스만 임포트하기
- from 모듈이름 import 함수명
- 위 방식으로 임포트할 경우 모듈명을 통하지 않고 함수 호출 가능
# main_exit2.py
from sys import exit
while True:
print("종료하려면 exit를 입력하세요")
user_input = input(">> ")
if user_input == "exit":
exit() # 모듈명을 통하지 않고 함수 호출
모듈의 모든 함수, 클래스 임포트하기
- 모듈의 특정 함수, 클래스를 임포트하는 from import 문으로 모든 함수 임포트 가능
- 모듈 대부분을 사용하는 경우가 아니라면 필요한 모듈만 임포트하여 사용하는 것이 유지 보수 측면에서 더 나을 수 있다
from import 문으로 모듈 전체 임포트
- 호출할 때 모듈 이름을 매번 사용하지 않아도 사용 가능
- 모듈 간의 함수가 겹치는 등의 문제가 발생할 수 있음
# main_exit3.py
from sys import *
while True:
print("종료하려면 exit를 입력하세요")
user_input = input(">> ")
if user_input == "exit":
exit() # 모듈명을 통하지 않고 함수 호출
모듈 이름을 바꿔서 임포트하기
- 모듈 이름을 더 쉽게 바꾸거나, 사용하는 다른 변수와 이름이 겹칠 경우 등 import as 문으로 이름 변경해서 사용 가능
- 모듈 이름을 변경한 경우 원래 모듈 이름으로는 접근 불가
# main_exit4.py
import sys as s
sys = "반복 시스템"
while True:
print(sys)
print("종료하려면 exit를 입력하세요")
user_input = input(">> ")
if user_input == "exit":
s.exit() # 변경된 모듈 이름을 통해 접근 가능
모듈 검색 경로
- 모듈을 임포트할 때 제일 먼저 호출하는 코드의 모듈과 같은 디렉터리에서 해당 모듈 탐색
- 만약 같은 디렉토리에 없다면 파이썬 탐색 경로를 순서대로 돌아가며 탐색
- 모듈 탐색 경로 : 운영 체제의 환경 변수(윈도우 = %PYTHONPATH%, 리눅스/유닉스/맥 = $PYTHONPATH 환경 변수 값)
import sys
print(sys.path)
# 리스트 형태로 파이썬 탐색 경로 출력
# 만약 모든 경로에서 모듈을 찾을 수 없을 때는 ImportError 예외 발생
패키지 정의하기
패키지
- 모듈을 구조화하고 효율적으로 관리하기 위해 나눠 놓은 것 (모듈을 용도 또는 유형별로 디렉터리를 생성해 분류한 것)
- 파일 생성 시 해당 모듈에 접근해 사용할 수 있지만, 하위 호환성을 위해 __init__.py 파일 생성하는 것이 좋음
# 패키지 예시
main_drinks.py
main_fruits.py
foods/
__init__.py
drinks/
__init.py
milk.py
water.py
fruits/
__init.py
orange.py
watermelon.py
apple.py
# foods/drinks/milk.py
def drink():
print("milk")
# main_drinks.py
from foods.drinks import milk # 패키지 임포트
milk.drink()
__all__변수
- 패키지 디렉터리의 __init__.py 파일 안에 __all__변수 정의 가능
- 해당 디렉터리 안에 있는 모듈의 이름들을 넣는 리스트 변수
- from import * 문을 사용하여 모듈을 불러올 때 특정 모듈만 가져오거나 특정 모듈을 빼고 싶을 때 사용
-> from import * 문을 사용했을 때 알려줄 모듈 목록을 __all__변수에 저장
# foods/fruits/__init__.py
__all__ = ['orange', 'watermelon'] # 임포트 시 orange.py와 watermelon.py 파일만 인식
# main_fruits.py
from foods.fruits import *
orange.eat() # 문제 없이 호출
apple.eat() # apple 모듈을 못 찾아서 에러 발생
패키지 사용하기
패키지가 있는 특정 모듈 임포트하기
- from 부분에 패키지, imoprt 부분에 임포트할 모듈 작성
- 모듈 이름을 통해서 함수 호출
- as 키워드를 사용해 모듈 이름 변경
- import 문만 사용해 패키지 있는 모듈 임포트 가능하지만, 호출할 때마다 패키지명까지 같이 써야 함
# 패키지가 있는 특정 모듈 임포트
from foods.drinks import milk
milk.drink()
# 패키지가 있는 특정 모듈의 이름 변경해 임포트
from foods.drinks import milk as m
m.drink()
# 패키지가 있는 모듈의 특정 함수/클래스 임포트
from foods.drinks.milk import drink
drink()
# 패키지가 있는 모듈의 모든 함수/클래스 임포트
from foods.drinks.milk import *
drink()
# import문만 사용해서 패키지가 있는 모듈 임포트
import foods.drinks.milk
foods.drinks.milk.drink()
표준 라이브러리 활용하기
표준 라이브러리
- 파이썬에서는 내장 상수, 내장 함수, 모듈 등을 다양하게 제공한다
- https://docs.python.org/ko/3/library/
os 모듈
- 운영 체제에 작업을 요청하는 기능을 제공
ex. 파일 읽고 쓰기, 디렉터리 생성과 삭제, 현재 작업 디렉터리 찾기, 현재 시각 확인 등
import os
print("현재 작업 디렉터리는", os.getcwd(), "입니다")
# get working directory 명령, 현재 작업 디렉터리 위치 출력
os.system('dir')
# system 함수를 사용해 명령 프롬프트나 셀에서 동작할 명령어를 운영체제에 요청
# dir : 운영체제가 파일, 디렉터리 목록을 보여주는 명령어
sys 모듈
- 파이썬 인터프리터에서 사용하는 변수나 기능에 접근할 때 사용
import sys
print('실행 파일명 :', sys.argv[0]) # argv 첫 번째 값 = 실행한 파이썬 파일명
# 옵션 출력
for i in range(1, len(sys.argv)):
print('옵션', i, ':', sys.argv[i])
sys.exit() # 프로그램 종료
for _ in range(1, 100):
print("실행되지 않음")
math 모듈
- 수학 계산에 유용한 상수와 함수를 제공
ex. 상수, 올림, 내림, 계승, 최대공약수, 거듭제곱, 삼각함수, pi, e 등
import math
print('파이 상수')
print('math.pi :', math.pi) # 3.141592653589793
print('e 상수')
print('math.e :', math.e) # 2.718281828459045
print('올림')
print('math.ceil(3.5) :', math.ceil(3.5)) # 4
print('내림')
print('math.floor(3.5) :', math.floor(3.5)) # 3
print('계승 구하기')
print('math.factorial(5) :', math.factorial(5)) # 120
print('최대공약수 구하기')
print('math.gcd(28, 70) :', math.gcd(28, 70) # 14
print('거듭제곱 구하기')
print('math.pow(2, 10) :', math.pow(2, 10)) # 1024.0
print('삼각함수 sin(1/2π)')
print('math.sin(math.pi/2) :', math.sin(math.pi/2)) # 1.0
print('삼각함수 cos(π)')
print('math.cos(math.pi) :', math.cos(math.pi)) # -1.0
print('삼각함수 tan(0)')
print('math.tan(0) :', math.tan(0)) # 0.0
random 모듈
- 특정 범위에서 임의의 난수 값을 생성하거나 주어진 몰곡에서 하나를 고르는 함수를 제공
import random as r
# 0 이상 1 미만 실수 값 : random()
print('r.random() : ', r.random())
# 실수값 : uniform()
print('시작값 2.5이상 끝값 10.0 미만 실수 값')
print('r.uniform(2.5, 10.0) :', r.uniform(2.5, 10.0)
# 랜덤 정수값 : randrange()
print('0 이상 끝값 10 미만 정수 값')
print('r.randrange(10) :', r.randrange(10))
print('1 이상 끝값 7 미만, 증가 값이 2인 정수 값')
print('r.randrange(1, 7, 2) :', r.randrange(1, 7, 2))
# 리스트에서 1개 값 꺼내오기 : choice()
season = ['봄', '여름', '가을', '겨울']
print('r.choice(season) :', r.choice(season))
# 리스트 순서 섞기 : shuffle()
li = ['가', '나', '다', '라', '마']
r.shuffle(li)
print(li)
# 리스트에서 몇 개의 값을 중복하지 않고 뽑기 : sample()
li = ['1번', '2번', '3번', '4번', '5번', '6번', '7번', '8번', '9번']
print('r.sample(li, 3) :', r.sample(li, 3)) # 리스트 출력됨
datetime 모듈
- 날짜와 시간을 다루는 데 사용
ex. 현재의 연, 월, 일, 시, 분, 초, 요일 등을 구하기, 날짜 간의 계산
from datetime import datetime # datetime모듈의 datetime 클래스 임포트
# 현재 날짜 시각 객체
today = datetime.now()
print('today = datetime.now() :', today) # 2024-12-19 02:10:47.461814
print('연, 월, 일 :', today.year, today.month, today.day)
print('시, 분, 초 :', today.hour, today.minute, today.second)
print('요일 :', today.weekday())
# 특정 날짜 시각 객체 만들기
day = datetime(2024, 1, 1, 0, 0, 0)
print('day = datetime(2024, 1, 1, 0, 0, 0) :', day) # 2024-01-01 00:00:00
# 2024년부터 지나온 시간 구하기
print('today - day :', today - day) # 353 days, 2:10:47.461814
써드파티 패키지 활용하기
써드파티 패키지
- 파이썬 표준 라이브러리 외의 제 3자가 개발한 모듈
PYPI
- 써드파티 패키지 중 하나로 PYPI(Python Package Index)에 의해 공유되는 패키지
- PIP(Pip Installs Packages) 도구를 사용하여 간편하기 설치 가능
- pip install 프로젝트명
유용한 써드파티 패키지
프로젝트명 | 설치명 | 설명 |
Beautiful Soup | pip install bs4 | XML, HTML 문서를 효과적으로 처리하여 필요한 정보를 추출해서 활용할 수 있도록 도와주는 라이브러리 |
Pillow | pip install pillow | 이미지 처리르 도와주는 라이브러리 |
PeeWee | pip install peewee | SQLite, MySQL, PostgreSQL을 지원하는 쉽게 사용할 수 있는 경량 ORM |
Scrapy | pip install scrapy | 스크래핑 및 웹크롤링을 위한 라이브러리로 데이터를 추출하여 결과를 json, xml, csv 같은 형식으로 내보내주는 라이브러리 |
Pygame | pip install pygame | 게임 제작을 위한 프레임워크 |
Pathlib | pip install pathlib | 운영 체제 간 파일 경로 문제 해결 |
Numpy | pip install numpy | 수학 통계 처리 라이브러리 |
Django | pip install django | 대표적인 파이썬 웹 개발 프레임워크 |
Flask | pip install flask | 대표적인 파이썬 웹 개발 프레임워크 |
'전공' 카테고리의 다른 글
파이썬_클래스 / 예외 처리 / 파일 처리 (2) | 2024.12.19 |
---|---|
자료구조_알고리즘 (1) | 2024.12.17 |
Java_예외 처리, 스레드 (0) | 2024.10.08 |
Java_컬렉션 제네릭 (7) | 2024.10.08 |
파이썬_변수, 자료형 / 제어문, 반복문 / 함수 (0) | 2024.07.10 |