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

[3팀/김규리] 9주차 파이썬 스터디 - 모듈과 패키지

kyuree 2023. 5. 25. 15:52

9차시_모듈과패키지_과제답안.pdf
0.15MB
9차시_모듈과패키지_과제.pdf
3.26MB
9차시_모듈과패키지_강의안.pdf
1.77MB

 

#1. 모듈과 패키지의 이해

파이썬은 매우 간결한 프로그래밍 언어

그 가장 큰 이유

  • 많은 사람들이 이미 파이썬으로 프로그램을 작성해두었기 때문!

모듈(module) → 이미 작성된 프로그램

패키지 (packages)→ 이런 프로그램의, 모듈의 묶음

모듈의 개념


  • 많은 제품들은 여러 부품으로 구성되며, 모듈화되어 판매되고 있음
    • 대표적인 예 ; 레고 블록
      • 하나만으로도 제품 but, 다른 블록과 연결 및 큰 밑판에 조립함으로써 거대한 작품도 만들 수 있음
      • 이때 레고 블록 하나하나가 바로 모듈
      • 자동차 부품, 벽돌 .. 등

패키지의 개념


  • 모듈의 묶음
  • 모듈 호출
    • ‘from’ 사용
    • 모듈 호출하기 위해 패키지부터 호출하는 명령어

 

#2. 모듈 만들기

모듈 만들기 실습


  • in 파이썬 → .py 파일 자체가 모듈임
  • 가장 쉽게 파이썬 모듈 만드는 방법
    • 디렉터리에서 .py파일 만들고
    • 그 파일에 필요한 함수 저장
    • ⇒ 다른 파일에서 import문 사용하여 해당 모듈 함수 불러낼 수 있음
  • 간단한 모듈 만들어 보기(1)→ .py로 저장해야 함
#파일 이름 : fah_converter.py
def convert_c_to_f(celcius_value):
		return celcius_value * 9.0 / 5 + 32

→ .py로 저장해야 함

모듈 불러와 사용해보기

#파일 이름 : module_ex.py
#1

import fah_converter

print("Enter a celsisus value:")
celsius = float(input())
fahrenheit = fah_converter.cover_c_to_f(celsius)
print("That's", fahrenheit, "degrees Fahrenheit.")

네임스페이스(Namespace)


  • 모듈 호출의 범위 지정하는 것
  • 하나의 모듈 안에 클래스 & 함수 & 변수 존재 → import 사용하여 호출 가능
  • but, 클라이언트 프로그램 함수 이름과 호출된 모듈 함수 이름 같은 경우 있음
    • 실수 또는 기존 클래스 상속받아 사용하다가 발생할 수도 잇음
  • ⇒ 호출된 모듈의 사용 범위 명확히 지정해야 함!
  • 네임스페이스 만들기
    1. 모듈 이름에 알리아스(alias) 생성 → 모듈 안으로 코드 호출하는 방법
      • 알리아스 → 일종의 별칭, 모듈의 이름 바꿔 부를 때 사용
        • 모듈의 이름이 너무 길거나 다른 코드와 헷갈리는 이름일 때
        • as 키워드 사용 → 모듈 이름 간단히 바꿔 사용
    • 예시
    import fah_converter as fah
    print(fah.covert_c_to_f(41.6)) #106.88000000000001
    
    • 설명
      • fah_converter → fah로 이름 변경하여 호출
      • 해당 모듈 안 함수 클래스 변수 호출하여 사용하기
        • [모듈명.함수명(또는 클래스명/변수명)]
    1. from 구문 사용 → 모듈에서 특정 함수 및 클래스만 호출하는 방법
    • 예시
    from fah_converter import covert_c_to_f
    print(covert_c_to_f(41.6))  #106.88000000000001
    
    • 설명
      • ‘from 모듈명 import 모듈 안의 함수명’
      • 이경우, 별도의 모듈명 쓰지 않아도 단독 사용 가능
      • 주의할 점
        • from은 꼭 모듈 호출하기 위한 키워드가 아님
        • 패키지 호출 및 해당 패키지 안 모듈 호출할 때도 사용하기에
    1. 별표(*) 사용
      • 해당 모듈 안에 있는 모든 함수, 클래스. 변수 가져옴
      • 사용 방법
        • ‘from 모듈명 import *’
      • 예시
      from fah_converter import *
      print(convert_c_to_f(41.6)) #106.88000000000001
      
  • 세 가지 중 가장 선호하는 방법?
    • 일반적으로 알리아스 생성하여 호출
      • 각각의 함수 및 클래스가 어디서 나오는지 명확히 표현하는 것이 좋기 때문!
      • ⇒ 같은 함수라도 convert_c_to_f보다 fah.convert_c_to_f라고 표기

내장모듈의 사용


파이썬 → 프로그래밍 개발위해 기본적 사용해야 하는 문자 처리, 웹, 수학과 관련된 다양한 내장 모듈 제공/ 별다른 조치 없이 import문 한 줄로 사용 가능

  • random 모듈
    • 난수 생성 모듈
    • 모듈 구성
      • randint(); 정수 모듈 생성
      • random(); 임의 난수 생성
    • 사용 예시
    import random
    #0~100사이 정수 난수 생성
    print(random.randint(0,100)) #7
    
    print(random.random()) #0.056550421789531846
    
  • time 모듈
    • 시간과 관련
    • 시간 변경 및 현재 시각 알려줌
    • 대표적으로 프로그램 동작하는 현재 시각 알 수 있음
    • 사용 예시
    #현재 시각 출력
    import time
    print (time.localtime())  #time.struct_time(tm_year=2018, tm_mon=8, tm_mday=19, tm_hour=22, tm_min=9, tm_sec=21, tm_wday=6, tm_yday=231, tm_isdst=0)
    
  • urllib 모듈
    • 웹과 관련됨
    • 대표적으로 request 모듈을 사용하면 특정 URL의 정보 불러올 수 있음
    • 사용 예시
    import urllib.request
    response = urllib.request.urlopen("<http://theteamlab.io>") 
    print(response.read())
    
    • urllib.request.urlopen()
      • 괄호 안에 특정 웹 주소 입력하면 해당 주소의 HTML 정보 가져옴
  • 이외의 다양한 파이썬 모듈은?
    • 가장 좋은 방법은 구글에 서치!
    • 특히 영어로..
    • if 프로그래밍 수행에 걸린 시간 알아내는 모듈 찾고 싶다면?
    • 다음과 같은 방식으로 검색어 입력
      • python time module run time
    • 또 다른 방법?
      • 파이썬 코리아에 문의

#3. 패키지 만들기

패키지의 구성


  • 하나의 대형 프로젝트를 수행하기 위한 모듈의 묶음
  • 모듈의 구성
    • 하나의 파일
  • 패키지 구성
    • 파일이 포함된 디렉터리(폴더)로 구성
    • 즉, 여러 개의 .py 파일 → 하나의 디렉터리에 들어가 있는 것
  • 라이브러리
    • 다른 사람이 만든 프로그램을 불러와 사용하는 것
    • 파이썬 → 패키지가 하나의 라이브러리임
  • 패키지의 예약어

패키지 만들기 실습


  • 인터넷에서 주식 정보 가져와 데이터베이스에 저장 + 필요한 정보 계산 프로그램

1단계: 디렉터리 구성

  • 패키지 이름
    • ‘roboadvisor’
    • 대부분 소문자 사용
  • 기능
    • crawling(크롤링)
      • 주식 관련 데이터를 인터넷에서 가져오는 기능
    • database(데이터베이스)
      • 가져온 데이터를 데이터베이스에 저장하는 기능
    • analysis(분석)
      • 해당 정보를 분석하여 의미 있는 값을 뽑아내는 기능
  • 각 패키지 내 → 세부 패키지에 맞춰 디렉터리 구성하기
    • cmd 창에 다음 명령 입력 → 디렉터리 생성
    mkdir roboadvisor 
    cd roboadvisor 
    mkdir crawling 
    mkdir database 
    mkdir analysis
    
  • 디렉터리 구성됨

  • 2단계: 디렉터리별로 필요한 모듈 만들기
    • 하나의 패키지 중첩된 구조로 만들 수 있으므로 패키지 안에 또 하나의 패키지 들어갈 수 있음
    • but, 각 디렉터리르 하나의 패키지로 선언하기 위해서는 예약된 파일 만들어야 함
    • ⇒ ‘init.py’
    • init.py’ ?
      • 각 디렉터리가 패키지임을 나타내는 예약 파일
      • 기본 .py 모듈 파일 + 각 디렉터리에 ‘init.py’ 파일 추가 → 패키지 기본 구조 만들어짐
    • 각 디렉터리 안에 .py파일 만들어 구성!
    • 각 하위 패키지 포함된 모듈에 필요한 기능을 구현
      • analysis 디렉터리
        def series_test():
        		print('series')
        
        def statics_test():
        		print("statics")
        
    • 실제 사용 → 파이썬 셸에 입력
    from roboadvisor.analysis import series 
    series.series_test()  #series
    
    → roboadvisor의 상위 디렉터리에서 파이썬 셸 실행해야 정상적 수행
    • 설명
      • **pycache**’ 생성
        • 해당 프로그램 작동될 때 사용하기 위한 모듈들의 컴파일 결과 저장
        • 이후 그 시점에서 해당 모듈을 수ㅎ정해도 결과가 반영되지 X
        • 완전히 종료된 후 수정해야 결과 반영됨
  • 3단계: 디렉터리별로 ‘init.py’ 구성하기
  • 4단계: ‘main.py’ 파일 만들기
    • 패키지를 한 번에 사용하기 위해 roboadvisor 디렉터리에 main,py 파 일을 만듦
    • 만드는 이류
      • 패키지 자체 실행 위해
    • 파일 구성
      • 기본 호출해야 하는 여러 모듈
        • from & import로 호출 → ‘if name == ‘ main ‘ 아래에 실제 실행코드 작성
        from analysis.series import series_test
        from crawling.parser import parser_test
        
        if name == ’ main
        		series_test()
        		parser_test()
        
        
  • 5단계: 실행하기 (패키지 이름만 호출)
    • 모든 코드 작성 후 해당 패키지 최상위 디렉터리에서 ‘python 패키지명’ 입력
    python roboadvisor 
    series
    parser
    

패키지 네임스페이스


  • 모듈 서로 호출할 때 사용하는 패키지 네임스페이스에 대해 알아보자
  • 모듈과 달리 훨씬 더 많은 중간 단계를 거쳐 복잡함
  • 종류
    • 절대 참조
      • 전체 패키지의 구조 생각 → 모듈의 경로 모두 호출
    • 상대 참조
      • 호출하는 디렉터리를 기준으로 호출
  • 절대 참조
  • 상대 참조

#4. 가상환경 사용하기

가상환경의 개념


  • 다른 개발자가 만든 패키지를 직접 사용하는 방법
  • 각 프로젝트에 맞는 프로그래밍 환경을 설정하는 것이 좋음
    • ex. 데이터 다루는 프로젝트 / 웹 다루는 프로젝트 → 성격이 매우 다름
  • 파이썬 → 이런 경우 지원 위해 가상환경이라는 개념으로 패키지 관리 도구 제공
  • 일반적으로 프로젝트 수행할 때
    • 코드 수행할 기본 인터프리터
    • 프로젝트별로 필요한 추가 패키지까지 설치
    • ⇒ 서로 다른 프로젝트 영향 주지 않도록 독립적인 프로젝트 수행 환경을 ㅅ구성할 수 있는데 이를 가상환경이라고 함
  • 대표적인 가상황경 도구
    • virtualenv
      • 파이썬 기본 제공 가상환경 도구
      • pip 이용하여 새로운 패키지 설치 가능
    • conda
      • miniconda의 전용 패키지 관리 도구
      • 가상환경 관리 + 패키지 설치

가상환경 설정하기


  • conda 사용 → 가상환경 설정 방법 알아보자

 

  • 가상환경 만들기
    1. cmd 창에 다음과 같은 명령어 입력
    conda create -n my_project python=3.4
    
    • 설명

  • conda
    • 실행 명령어
  • create
    • 가상환경 만드는 인수(argument)
  • -n
    • name 의 줄임말
  • my_project
    • 구성할 가상환경 이름
  • python=3.4
    • 설치되는 파이썬의 버전

⇒ ‘my_project라 는 이름의 가상환경을 python 3.4 버전으로 만들어라.’

  • 명령어 입력후
    • ‘Proceed ([y]/n)?’ → y 입력 → 설치 시작
  • 가상환경 실행하기
    • 가상화면 만들면 나타나는 화면에서 설명해줌
    • ‘activate my_project’
      • 해당 가상환경을 활성화하라는 의미
      • 형식
        • [activate 가상화면 이름]
      • 이제부터 해당 가상환경의 인터프리터만 실행됨
    • ‘where python’
      • 현재 실행되는 파이썬의 위치 출력
    • ‘deactivate’
      • 가상환경 종료
  • 가상환경 패키지 설치하기
    • ‘conda install matplotlib’
      • 형식
        • [conda install 설치할 패키지 이름]
      • matplotlib
        • 그래프 관리 패키지
  • 가상환경 패키지 실습하기
    • matplotlib 실습
      • 코드
      import matplotlib.pyplot as pit
      pit.plot([1, 2, 3, 4])  #[<matplotlib.lines.Line2D object at 0x000001E8CC52C080>]
      
      plt.ylabel('some numbers')  #Text(0, 0.5,'some numbers')
      plt.show()