TIL

[TIL] 10일차_PYTHON_Modual_Package

Molybdenum_j 2023. 3. 3. 19:02

▶ 모듈, 패키지

  • 모듈 : 변수, 함수, 클래스를 하나의 파일(.py)로 모아서 코드를 작성
  • 패키지 : 여러 개의 모듈 파일을 디렉토리로 구분하여 코드를 작성하는 방법 = 버전정보

▶ 모듈만들기

%%writefile ai_school.py
data = 'python'

def echo(msg):
    print('ai school : ', msg)

Writing ai_school.py
%ls

ai_school.py  sample_data/

 

▶ 모듈 사용

  • import, from, as
  • 모듈을 불러 올 때 = import
import ai_school
%whos

Variable    Type      Data/Info
-------------------------------
ai_school   module    <module 'ai_school' from '/content/ai_school.py'>
%cat ai_school.py

data = 'python'

def echo(msg):
    print('ai school : ', msg)
ai_school.data

'python'

 

  • import
import ai_school as ais
print(ais.data)
ais.echo('fighting!')

python
ai school :  fighting!
import numpy as np
import pandas as pd

 

  • from
from ai_school import echo
from ai_school import data, echo
from ai_school import * # <- data와 echo 둘 다 가져옴

 

 

▶ 패키지

  • 여러 개의 모듈을 디렉토리 구분해서 코드를 작성한다.
  • !apt-get install tree -y
  • tree : 디렉토리의 구조를 출력하는 우분투(OS)패키지
  • 패키지 구조만들기
    • mkdir : 디렉토리 만들기
    • -p : 상위 디렉토리를 만들면서 디렉토리를 만들기
    • touch : 빈파일 생성
!rm -rf stock
!mkdir -p stock/kor
!mkdir -p stock/usa
!touch stock/__init__.py
!touch stock/kor/__init__.py
!touch stock/usa/__init__.py
!tree stock

stock
├── __init__.py
├── kor
│   └── __init__.py
└── usa
    └── __init__.py

2 directories, 3 files

 


 

▶ __init__.py

  • 패키지에 있는 디렉토리의 모듈을 설정하는 파일
  • __init__.py python 3.x 버전부터는 쓰지 않아도 문제가 없다. 하지만 하위버전 호완성을 이유로 __init__.py를 써주는 것이 좋다.

 

  • 패키지 설치 파일 만들기
!rm -rf stock
!mkdir -p stock/stock/kor
!mkdir -p stock/stock/usa
%%writefile stock/stock/kor/kospi.py
def crawl_kospi():
    print('crawl_kospi')

Writing stock/stock/kor/kospi.py

 

  • setup.py 파일 생성
%%writefile stock/setup.py
from setuptools import setup, find_packages

setup(
    name='stock',
    version='0.0.1',
    author='ai_school',
    author_email='ai_school@likelion.net',
    packages=find_packages(),
    include_package_data=True,
)

Overwriting stock/setup.py

 

 

  • __init__.py 설정
%%writefile stock/stock/__init__.py 
from .kor.kosdaq import crawl_kosdaq
from .kor.kospi import crawl_kospi
from .usa.nasdaq import crawl_nasdaq

Writing stock/stock/__init__.py

 


 

▶ 디렉토리 이동

  • ./ : 현재 디렉토리 (생략가능)
  • ../ : 상위 디렉토리
  • ~/ : 현재 로그인 되어있는 계정의 최상위 디렉토리

 

  • 만든 패키지 설치
  • - e옵션 : 개발자 모드옵션 = 패키지 설치 후에 코드를 수정해도 코드가 적용된다.
!pip install -e stock

-> colab에서는 uninstall, 설치된 패키지 사용 동작 x

 


 

▶ 예외처리

  • 코드의 에러를 처리하는 방법, 문법
  • try, except,finally, raise
try:
    print('connet database') # 리소스 사용
    print(1/0)
except Exception as e:
    print(e)
finally: # try 구문에 에러가 있던 없던 항상 코드 실행하는 구문
    print('disconnect') # 리소스 반납
print('python')

connet database
division by zero
disconnect
python

 

  • raise : 강제로 에러를 발생시킨다. <- 강제로 에러를 발생시켜 코드를 중단시킴)
    • 에러만들기
class LowNumber(Exception):
    def __str__(self):
        return 'insert number grater then 10!'

 

 

출처-멋쟁이사자처럼_AISCHOOL_박두진강사님