[부스트캠프 AI Tech 5기] Pre-course : 2-1. Module and Project

bee·2023년 1월 13일
0
post-thumbnail

해당 시리즈의 모든 내용은 TeamLab Director 최성철 교수님의 부스트캠프 pre-course 강의 내용입니다.

파이썬은 대부분의 라이브러리가 이미 다른 사용자에 의해서 구현되어 있다.


모듈

  • 프로그램에서는 작은 프로그램 조각들, 모듈들을 모아서 하나의 큰 프로그램을 개발한다.
  • 프로그램을 모듈화 시키면 다르 프로그램이 사용하기 쉽다.
    예) 카카오톡 게임을 위한 카카오톡 접속 모듈

Built-in Module

# 난수 생성
import random
print(random.randint (0, 100)) # 0 ~ 100 사이의 정수 난수를 생성
print(rnadom.randint) # 일반적인 난수 생성
# 시간
import time
print(time.localtime()) # 현재 시간 출력
# 웹
import urllib.request
response = urllib.request.urlopen("http://theteamlab.io")
print(response.read())

Module 만들기

  • 파이썬의 Module은 py파일을 의미한다.
  • 같은 폴더의 Module에 해당하는 .py파일과 사용하는 .py를 저장한 후, import문을 사용해서 Module을 호출한다.
# fah_converter.py 파일
>>> def convert_c_to_f(cel_value):
		return cel_value * 9.0 / 5 + 32
>>> test = "GGG"
# 모듈 사용 방법
>>> import fah_converter # fah_converter.py에 있는 모든 코드들이 메모리로 로딩된다.
>>> fah_converter.convert_c_to_f(42.6) # 모듈명.함수명(파라미터 값)
108.68 

# module_ex.py 파일
>>> import fah_converter # 모듈안에서 다른 모듈을 사용할 때

>>> if __name__ == "__main__":
		print("Enter a celcius value : ")
        celcius = float(input())
        
        fah = fah_converter.convert_c_to_f(celcius)
        print("That's {0} degrees Fahrenheit".format(fah))

__pychae__ 폴더의 의미 : 내 폴더를 메모리로 로딩할 때 좀 더 빠르게 하기 위해서 컴파일 시켜준 것.

namespace

  • 모듈을 호출할 때 범위를 정하는 방법
  • 모듈 안에는 함수와 클래스 등이 존재 가능하다.
  • 필요한 내용만 골라서 호출할 수 있다.
  • from과 import 키워드를 사용한다.
    ex) import fah_converter에서는 fah_converter 안의 모든 내용을 호출하게 된다. 이 때, 모든 코드들이 메모리에 로딩되는 것을 방지하기 위해서 namespace를 사용한다.

1) Alias 설정하기 - 모듈명을 별칭으로 써서
가장 선호하는 방식 (이유 : 어디서 왔는지를 명확하게 밝혀주기 때문에)

import fah_converter as fah # fah_converter를 fah라는 이름으로
print(fah.convert_c_to_f(41.6)) # 그 안에 convert_c_to_f 함수를 쓴다.

2) 모듈에서 특정 함수 또는 클래스만 호출하기

ㄹ개ㅡ fah_converter import convert_c_to_f # fah_converter라는 모듈에서 convert_c_to_f 함수만 불러온다.
print(fah.convert_c_to_f(41.6))

3) 모듈에서 모든 함수 또는 클래스 호출하기

from fah_converter import * # fah_converter라는 모듈에서 전체 호출
print(fah.convert_c_to_f(41.6)) 

패키지

  • 모듈을 모아놓은 단위, 하나의 프로그램
  • 하나의 대형 프로젝트를 만드는 코드의 묶음
  • 다양한 모듈들의 합, 폴더로 연결됨
  • __init__, __main__ 등 키워드 파일명이 사용되낟.
  • 다양한 오픈 소스들이 모두 패키지로 관리된다. (링크텍스트)

패키지 만들기

※ 이 부분 이해가 안가서 다시 한번 들어야할듯 ;;..
1) 루트 폴더 생성

2) 기능들을 세부적으로 나눠 폴더로 만듦

3) 각 폴더별로 필요한 모듈을 구현함

4) 1차 Test-python shell

5) 폴더별로 __init__.py 구성하기

  • 현재 폴더가 패키지임을 알리는 초기화 스크립트
  • 없을 경우 패키지로 간주하지 않는다. (python 3.3+ 부터는 X)
  • 하위 폴더와 py파일(모듈)을 모두 포함한다.
  • import__all__ 키워드 사용
## stage 의 __init__.py 파일
>>> __all__ = ["image", "sound", "stage"] # 우리가 앞으로 사용할 모듈의 이름을 적어준다. 

>>> from.import image # 모듈 선언
>>> from.import sound
>>> from.import stage
## sound 의 __init__.py 파일
>>> __all__ = ["bgm", "echo"] # 우리가 앞으로 사용할 모듈의 이름을 적어준다. 

>>> from.import bgm # 모듈 선언
>>> from.import echo
## image 의 __init__.py 파일
>>> __all__ = ["character", "object_type"] # 우리가 앞으로 사용할 모듈의 이름을 적어준다. 

>>> from.import character # 모듈 선언
>>> from.import object_type

실행할 main 파일 생성

## stage 의 __main__.py 파일
>>> from sound import echo

>>> if __name__ == '__main__':
		print("Hello Game")
        print(echo.echo_play())

package namespace

  • 패키지 내에서 다르폴더의 모듈을 호출할 때, 상대 참조로 호출하는 방법

오픈 소스 라이브러리 사용하기

  • 진짜 프로젝트를 한다. > 내 PC에 패키지(=남들이 만든 프로젝트)를 설치한다. > 두 개의 프로젝트 (웹, 데이터분석) 패키지를 둘다 설치한다? > 충돌 발생!
  • 해결방안 : 가상환경 설정하기

가상환경 Virtual Environment

  • 프로젝트 진행 시 필요한 패키지만 설치하는 환경
    (프로젝트의 목적에 맞춰서 조금 다른 python 환경을 만들어 주는 것)
  • 기본 인터프리터 + 프로젝트 종류별 패키지 설치
    ex) 웹 프로젝트, 데이터분석 프로젝트 각각 패키지 관리할 수 있는 기능
  • 다양한 패키지 관리 도구를 사용한다.

대표적인 패키지 관리 도구

1) virtualenv (+ pip)

  • 가장 대표적인 가상환경 관리 도구
  • 래퍼런스 + 패키지 개수 측면에서 강점
  • but, pip에서는 컴파일된 코드가 안들어있을 가능성이 있다.

2) conda

  • 상용 가상환경 도구
  • miniconda 기본 도구
  • 설치 용이성, Windows에서 장점
  • 패키지 설치
  • conda 가상환경 예시 : matplotlib을 활용한 그래프 표시
    - 대표적인 파이썬 그래프 관리 패키지
    - 엑셀과 같은 그래프들을 화면에 표시함
    - 다양한 데이터 분석 도구들과 함께 사용함

profile
벌집처럼 밀도있게 차곡차곡 쌓아나가는중

0개의 댓글