뒤죽박죽 데이터분석 일기장
[Python] [5일차] 모듈과 패키지 본문
안녕하세요. Dayconic 입니다. 이번 포스트는 파이썬에서 다양한 기능들을 사용하기 위한 필수 단계인 모듈과 패캐지 개념에 대해서 알아보려고 합니다.
모듈이란?
: 변수, 함수, 클래스를 하나의 파일(.py)로 모아서 코드를 작성한 것
패키지이란?
: 여러개의 모듈 파일을 디렉토리로 구분하여 코드를 작성하는 방법
모듈을 만들어 보겠습니다.
%%writefile ai_school.py
data = 'python'
def echo(msg) :
print('ai school : ', msg)
위의 모듈을 생성하고 나서
import ai_school
# import 모듈명 ;을 입력해 모듈을 불러올 수 있습니다.
아래의 코드는 colab의 지원하는 기능이고 파일을 생성할 수 있게 기능을 가지고 있습니다.
%%%writefile ai_school.py
# %%%writefile 파일명.py
생성된 모듈에는 변수와 함수를 하나씩 포함하고 있습니다.
이렇게 생성된 모듈은 colab에서 지원하는 기능을 통해 더 자세히 확인할 수 있습니다.
%ls <- 설치여부 확인
# 결과
# ai_school.py sample_data/
%whos <- 설치 위치 및 데이터 타입 확인
# 결과
# Variable Type Data/Info
# -------------------------------
# ai_school module <module 'ai_school' from '/content/ai_school.py'>
%cat <- 모듈의 내용을 확인하고 싶을때
# 결과
# data = 'python'
# def echo(msg) :
# print('ai school : ', msg)
특히 %cat을 통해 모듈이 포함하고 있는 변수나 함수에 대해서 더 자세히 확인할 수 있습니다.
모듈 변수 출력
# 모듈 변수 출력
ai_school.data
# 결과
# 'python'
모듈 함수 출력
# 함수 실행
ai_school.echo("너무 어렵지만 화이팅입니다!")
# 결과
# ai school : 너무 어렵지만 화이팅입니다!
모듈 이름 간소화 : 모듈이름이 너무 길때는 as를 사용해 줄일 수 있습니다!
import ai_school as ais
print(ais.data)
ais.echo('fighting!~')
# 결과
# python
# ai school : fighting!~
추후에 판다스나 넘파이를 사용할 때도 간소화 후 사용해 진행합니다.
# 예시
import numpy as np
import pandas as pd
패키지 : 패키지는 여러개의 모듈을 디렉토리에 구분해서 코드를 작성합니다.
코랩 서버 컴퓨터는 리눅스 ubuntu os 기반으로 서비스를 제공하기 때문에 tree 라는 디렉토리의 구조를 출력하는 리눅스 ubuntu(os) 패키지를 이용해 디렉토리를 확인할 수 있습니다.
그럼 tree package를 설치해 보겠습니다.
일반적인 패키지를 설치할 때는 아래의 코드를 사용합니다.
pip install package_name
하지만, 코랩 서버는 리눅수 우분투(os)를 사용하기 때문에 다른 방법으로 설치해 줘야 합니다.
!apt-get install tree -y
# 위와 같은 shell command는 주석이 위에 있으면 안됨
그러고 아래의 방법으로 디렉토리를 구성할 수 있습니다.
# 패키지 구조 만들기
# 아래는 우분투에서 작동되는 명령어
# mkdir : 디렉토리 만들기
# -p : 상위 디렉토리를 만들면서 디렉토리 만들기
# touch : 빈파일 생성
!mkdir -p stock/kor
!mkdir -p stock/usa
!touch stock/__init__.py
!touch stock/kor/__init__.py
!touch stock/usa/__init__.py
!tree stock
결과:
특정 디렉토리에 모듈 생성하기
위의 방법을 사용해 코스닥, 코스피 모듈은 kor 폴더에 그리고 나스닥과 snp500 모듈은 usa 폴더에 넣어보겠습니다.
%%writefile stock/kor/kosdaq.py
def crawl_kosdaq():
print('crawl_kosdaq')
%%writefile stock/usa/snp500.py
def crawl_snp500():
print('crawl_snp500')
%%writefile stock/usa/nasdaq.py
def crawl_nasdaq():
print('crawl_nasdaq')
!tree stock
결과:
각각 kor 그리고 usa 폴더 밑에 생성한 __init__.py는 패키지에 있는 디렉토리의 모듈을 설정하는 파일입니다.
파이썬 3.x 버젼부터는 쓰지 않아도 문제가 없지만 하위버젼 호환성을 위해 써주는 게 좋습니다.
패키지 안에 코드 초기화
!rm -rf stock
자 이렇게 성공적으로 패키지를 만들었습니다. 각 디렉토리에 원하는 모듈들이 저장되어 있습니다.
이 패키지를 이용해 저장되어 있는 모듈을 import 해 사용할 수 있습니다.
# 코스피 모듈을 import 하려면
import stock.kor.kospi # stock 패키지 안에 있는 kor 폴더에 kospi 모듈을 출력
코스피 모듈안에 있는 함수를 출력해 보겠습니다.
import stock.kor.kospi
stock.kor.kospi.crawl_kospi()
# 결과
# crawl_kospi
패키지 안에 있는 모든 모듈 가져오기
from stock.kor import *
위의 방법은 패키지 안에 있는 모든 모듈을 불러오는 방법입니다.
%%writefile stock/kor/__init__.py
__all__ = ['kospi'] # 모듈이름
이 방법을 하기 전에는 __all__ 을 써야지 성공적으로 불러올 수 있습니다.
패키지 서치 방법
1. 기본으로 설치되어 있는 패키지 목록 불러오기
!ls /usr/lib/python3.8
# default packages
2. 설치된 패키지 목록 불러오기
!ls /usr/local/lib/python3.8/dist-packages
# installed packages
3. 특정 키워드 패키지 출력하기
!pip list | grep pandas
# 여기서 입력된 특정 키워드는 pandas
알아두면 좋은 상식: 현재 구글 colab에서는 이미 설치된 패키지에 한해서는 삭제하는 기능을 지원하지 않습니다.
파이썬 입문 문법의 마지막으로 예외처리를 공부해 보겠습니다.
예외처리란? 코드의 에러를 처리하는 방법입니다.
예외처리에서는 try, except, finally, raise가 사용됩니다.
try:
print(1/0)
except Exception as e: # 오류 내용은 e로 저장,
print(e) # e 출력
print('python')
# 결과
# division by zero <- 에러 내용
# python
설명: try 구문 안에서 명령어를 실행합니다. except 을 이용해 오류내용을 e로 저장하고 출력합니다.
이번에는 위의 코드에 finally를 넣어 사용해 보겠습니다.
try:
a = open('sales.pkl','w')
print(a+b+c+d)
#어떤 코드를 실행
finally:
a.close() #중간에 무슨 오류가 발생하던 종료한다
finally의 경우 try 안에 명령문에서 어떤 오류가 있더라도 finally 안에 있는 명령어는 실행됩니다.
에러 만들기
# 에러만들기
class LowNumber(Exception): #exception class 상속
def __str__(self):
return 'insert number greater than 10!'
설명: 클래스 안에 exception class를 상속해 주고 오류 발생시 출력할 문자열을 입력해 줍니다.
# 함수의 파라미터에 10이하의 데이터가 넘어오면 에러(LowNumber)를 발생
def input_number(number):
if number <= 10:
raise LowNumber
print(number)
input_number(2)
설명: 함수를 만들어서 함수 안의 조건문에 예를 들어 10보다 작은 수 일 때 LowNumber라는 에러 클래스를 출력한다는 걸 raise을 이용해 표현합니다.
결과:
위처럼 오류가 발생합니다. 그러고 오류 내용을 아까 우리가 설정했던 LowNumber class에 들어있는 문자열로 출력되는 걸 확인할 수 있습니다.
지금까지 모듈, 패키지, 예외처리에 대해서 복습해 봤습니다. 혹시 틀린 부분이 있다면 댓글로 남겨주시면 감사하겠습니다. 지금까지 읽어주셔서 감사합니다.
'Python' 카테고리의 다른 글
[Python] 네이버 데이터랩 API 사용기 및 월별 평균량 구하기 (2/2) (0) | 2023.07.18 |
---|---|
[Python] 네이버 데이터랩 API 사용기 및 월별 평균량 구하기 (1/2) (0) | 2023.07.18 |
[Python] [5일차] 입출력, 파일 저장 및 출력 (0) | 2023.01.07 |
[Python] [5일차] Class 파트 2 (2) | 2023.01.06 |
[Python] [4일차] Class 파트 1 (0) | 2023.01.05 |