스터디/파이썬 스터디 강의자료

[2팀/김가림, 최다예] 9차시 모듈과 패키지

omomirg 2023. 5. 26. 00:22

9주차_모듈과패키지_과제.pdf
1.30MB
9차시_모듈과패키지_강의안.pdf
0.70MB

모듈과 패키지

참고도서 : 데이터 과학을 위한 파이썬 프로그래밍, 최상철

모듈과 패키지의 이해

  • 모듈의 개념→ 하나하나 연결해 어떤 목적을 가진 프로그램을 만들기 위한 작은 프로그램인터페이스? 해당 모듈을 사용하기 위해서는 모듈 간의 연결을 위한 약속random 모듈 : 난수를 쉽게 생성시켜주는 모듈
  • import random random.randint(l, 1000) # 198
  • 파이썬에서의 모듈
  • 각 모듈마다 저마다 역할이 있어 서로 다른 모듈과 인터페이스만 연결되면 사용할 수 있다.
  • 작은 프로그램 조각
  • 패키지의 개념from 키워드 사용 : 모듈을 호출하기 위해 패키지부터 호출
  • 모듈의 묶음

모듈 만들기

  • 모듈 만들기 실습다른 파이썬 파일이나 파이썬 셸에서 import문을 사용하여 해당 모듈의 함수를 쉽게 불러낼 수 있다.
    import fah_converter
    
    print("Enter a Celsius value:")
    Celsius = float(inputO)
    fahrenheit = fah_converter.covert_c_to_f(celsiiis) # covert_c_to_f() 함수 사용
    print("That’s", fahrenheit, "degrees Fahrenheit.")
    # 'module_ex.py'로 저장
    
    <aside> 💡 호출받는 모듈과 호출하여 사용하는 클라이언트 프로그램이 같은 디렉터리 안에 있어야 한다
  • </aside>
  • def covert_c_to_f(celcius_value): return celcius_value *9.0/5+32 # 'fah_converter.py'로 저장 -> fah_converter가 모듈
  • 파이썬에서는 .py 파일 자체가 모듈이다. 가장 쉽게 파이썬 모듈을 만드는 방법: 현재 실습중인 디렉터리에서 .py 파일을 하나 만들고, 그 파일에 필요한 함수를 저장
  • 네임스페이스클라이언트 프로그램의 함수 이름과 호출된 모듈의 함수 이름이 같은 경우 사용
    • 네임 스페이스 만드는 법
      1. 모듈 이름에 알리아스(alias)를 생성하여 모듈 안으로 코드를 호출하는 방법 > 가장 선호하는 방법
      알리아스는 일종의 별칭으로 모듈의 이름을 바꿔 부를 때 사용함 모듈의 이름이 너무 길거나 다른 코드와 헷갈리는 이름일 때 as 키워드를 사용
      1. from 구문을 사용하여 모듈에서 특정 함수 또는 클래스만 호출하는 방법
      from fah_converter import covert_c_to_f
      print(covert_c_to_f(41.6))
      
      ‘from 모듈명 import 모듈 안에 있는 함수명’의 형태로 작성<aside> 💡 from은 꼭 모듈을 호출하기 위한 키워드가 아니다패키지를 호출하거나 해당 패키지 안에 있는 모듈을 호출할 때도 from 키워드를 사용할 수 있다
      1. 해당 모듈 안에 있는 모든 함수, 클래스, 변수를 가져오는 별표(*)를 사용
      컴퓨터에서 별표는 곱셈의 의미도 있지만 모든 것이라는 뜻도 있다.
      from fah_converter import
      print(covert_c_to_f(41.6))
      
    • ‘from 모듈명 import 수’: 해당 모듈 안에 있는 모든 사용 가능한 리소스를 호출
    • </aside>
    • : 해당 모듈 안에 있는 함수를 가져다 사용할 수 있다. (별도의 모듈명을 써 주지 않아도 단독 사용 가능)
    • import fah_converter as fah print(fah.covert_c_to_f(41.6))
  • 모듈 호출의 범위를 지정하는 것
  • 내장 모듈의 사용
    • random 모듈
    난수 생성 모듈
    import random
    print(random.randint (0, 100)) # 0-100 사이의 정수 난수를 생성
    print(random.random())         # 일반적인 난수 생성
    
    • time 모듈
    일반적으로 시간을 변경하거나 현재 시각을 알려준다.
    import time
    print(time.localtimeO) # 현재 시각 출력
    
    • urllib 모듈
    웹과 관련된 urllib 모듈은 웹 주소의 정보를 불러온다.
    import urllib.request
    response = urllib.request.urlopen("http://theteamlab.io")
    print(response.read())
    
  • 대표적으로 urllib의 request 모듈을 사용하면 특정 URL의 정보를 불러올 수 있다.
  • 대표적으로 프로그램이 동작하는 현재 시각을 알 수 있다.
  • 정수 모듈을 생성하는 randint() 함수 / 임의의 난수를 생성하는 random() 함수가 있다

패키지 만들기

  • 패키지의 구성즉, 여러 개의 .py 파일이 하나의 디렉터리에 들어가 있는 것을 ‘패키지’라고 한다.<aside> 💡 파일명 자체가 예약어를 반드시 지켜야만 실행되는 경우가 있다.따라서 패키지 내의 몇몇 파일에는 _ _ init _ , _ _ main _ 등의 키워드 파일명이 사용된다.
  • </aside>
  • 파이썬의 모듈을 구성할 때와 마찬가지로 패키지에도 예약어가 있다.
  • 패키지 : 하나의 대형 프로젝트를 수행하기 위한 모듈의 묶음 모듈은 하나의 파일로 이루어져 있고, 패키지는 파일이 포함된 디렉터리(폴더)로 구성된다.
  • 패키지 만들기 실습
    • 1단계 : 디렉터리 구성하기
    패키지 이름 : ‘roboadvisor’ (패키지 이름 대부분은 소문자를 사용) roboadvisor 세 가지 기능
    1. crawling(크롤링): 주식 관련 데이터를 인터넷에서 가져오는 기능
    2. database(데이터베이스): 가져온 데이터를 데이터베이스에 저장하는 기능
    3. analysis(분석): 해당 정보를 분석하여 의미 있는 값을 뽑아내는 기능
    각 패키지 내에서 다시 세부 패키지에 맞춰 디렉터리를 구성
    mkdir roboadvisor
    cd roboadvisor
    mkdir crawling
    mkdir database
    mkdir analysis
    
    • 2단계 : 디렉터리별로 필요한 모듈 만들기
    만들어진 디렉터리에 필요한 모듈을 만든다.하지만 각각의 디렉터리를 하나의 패키지로 선언하기 위해서는 예약된 파일을 만들어야 한다.각 하위 패키지에 포함된 모듈에 필요한 기능을 구현
    def series_test():
        print("series")
    
    def statics_test():
        print("statics")
    
    실제로 사용하기 위해서는 파이썬 셸에서 다음과 같이 입력한다.</aside>
    • 3단계 : 디렉터리별로 _ _init _ _.py 구성하기
    디렉터리별로 _ _ init _ _.py 파일을 구성패키지 개발자나 설치 시 확인해야 할 내용 등의 메타데이터 (패키지의 구조)
    • 4단계: _ _ main _ _.py 파일 만들기
    패키지를 한 번에 사용하기 위해 roboadvisor 디렉터리에 _ _ main _ _.py 파일을 만듦
    from analysis.series import series_test
    from crawling.parser import parser_test
    
    if __name__ == '__main__':
        series_test()
        parser_test()
    
    • 5단계 : 실행하기(패키지 이름만 호출)
    모든 코드를 작성한 후 해당 패키지의 최상위 디렉터리 ‘python 패키지명'을 입력하여 실행
  • python roboadvisor series parse
  • 기본적으로 호줄해야 하는 여러 모듈을 from과 import문으로 호출한 후, if 구문 아래에 실제 실행 코드 작성
  • import analysis import crawling import database __all__= ['analysis', 'crawling', 'database']
  • : 해당 디렉터리가 파이썬의 패키지라고 선언하는 초기화 스크립트
  • from roboadvisor.analysis import series series.series_test()
  • <aside> 💡 roboadvisor의 상위 디렉터리에서 파이썬 셸을 실행해야 정상적으로 수행
  • analysis 디렉터리에 있는 series.py와 statics.py에 들어갈 코드
  • _ _ init _ _.py : 각 디렉터리가 패키지임을 나타내는 예약 파일
  • 하나의 패키지는 중첩된 구조로 만들 수 있으므로 패키지 안에 또 패키지가 들어갈 수 있다.
  • 먼저 cmd 창에 다음 명령을 입력하여 디렉터리를 생성한다.
  • 인터넷에서 주식 정보를 받아와 데이터베이스에 저장하고, 필요한 정보를 계산하는 프로그램
  • 패키지 네임 스페이스
    • 절대참조
    전체 패키지의 구조를 생각해 모듈의 경로를 모두 호출
    • 상대 참조
    호출하는 디렉터리를 기준으로 호출
  • But 패키지 내에서는 상대 참조로 호출하는 것을 추천하지 않는다. 코드를 간략히 사용할 수 있다는 장점이 있지만, 패키지 전체를 보는 입장에서는 모든 패키지의 경로를 정확히 기록하는 것이 이해하기 쉽다.
  • 일반적으로 패키지 내부에서 다른 패키지를 부를 때 가장 많이 사용하는 방법!
  • 패키지 내에서 모듈을 서로 호출할 때 사용

가상환경 사용하기

  • 가상환경의 개념패키지를 설치할 때 다른 프로젝트가 영향을 주지 않도록 독립적인 프로젝트 수행 환경 구성
  • 다른 개발자가 만든 패키지를 직접 사용하는 방법
  • 가상환경 설정하기
    • 가상환경 만들기
    # cmd 창에 입력
    conda create -n my_project python=3.4
    # conda -> 실행 명령어이고, create -> 가상환경을 만드는 인수, 
    # -n my_project에서 -n : name의 줄임말, my_project : 구성할 가상환경 이름
    # python=3.4 : 설치되는 파이썬의 버전
    
    my_project라는 이름의 가상환경을 python 3.4 버전으로 만들어라.
    • 가상환경 실행하기
    activate my.project
    
    my_project라는 가상환경을 활성화하라는 뜻
    where python
    
    현재 실행되는 파이썬의 위치가 어디인지 출력된다.실행된 가상환경 종료
    • 가상환경 패키지 설치하기
    conda install matplotlib
    
    conda install 다음에 패키지 이름을 넣는다.
    • 가상환경 패키지 실습하기
    matplotlib : 대표적인 파이썬 그래프 관리 패키지로, 엑셀과 같은 그래프를 화면에 출력
  • deactivate
  • 구성된 가상환경의 이름을 activate 다음에 넣으면 해당 가상환경이 실행되고, 프롬프트 앞에 (my_project)라는 가상환경 이름이 붙는다. (해당 가상환경의 인터프리터만 실행)