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

02 모듈 만들기
- 모듈 만들기 실습
파이썬에서는 .py 파일 자체가 모듈이다.
가장 쉽게 파이썬 모듈을 만드는 방법: 현재 실습중인 디렉터리에서 .py 파일을 하나 만들고, 그 파일에 필요한 함수를 저장
→ 다른 파이썬 파일이나 파이썬 셸에서 import문을 사용하여 해당 모듈의 함수를 쉽게 불러낼 수 있다.
def covert_c_to_f(celcius_value):
return celcius_value *9.0/5+32
# 'fah_converter.py'로 저장 -> fah_converter가 모듈
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'로 저장
🙌 호출받는 모듈과 호출하여 사용하는 클라이언트 프로그램이 같은 디렉터리 안에 있어야 한다
- 네임스페이스
→ 모듈 호출의 범위를 지정하는 것
클라이언트 프로그램의 함수 이름과 호출된 모듈의 함수 이름이 같은 경우 사용
네임 스페이스 만드는 법
- 모듈 이름에 알리아스(alias)를 생성하여 모듈 안으로 코드를 호출하는 방법
⇒ 가장 선호하는 방법
알리아스는 일종의 별칭으로 모듈의 이름을 바꿔 부를 때 사용함 모듈의 이름이 너무 길거나 다른 코드와 헷갈리는 이름일 때 as 키워드를 사용
import fah_converter as fah
print(fah.covert_c_to_f(41.6))
2. from 구문을 사용하여 모듈에서 특정 함수 또는 클래스만 호출하는 방법
from fah_converter import covert_c_to_f
print(covert_c_to_f(41.6))
‘from 모듈명 import 모듈 안에 있는 함수명’의 형태로 작성
: 해당 모듈 안에 있는 함수를 가져다 사용할 수 있다. (별도의 모듈명을 써 주지 않아도 단독 사용 가능)
🙌 from은 꼭 모듈을 호출하기 위한 키워드가 아니다
패키지를 호출하거나 해당 패키지 안에 있는 모듈을 호출할 때도 from 키워드를 사용할 수 있다
3. 해당 모듈 안에 있는 모든 함수, 클래스, 변수를 가져오는 별표(*)를 사용
컴퓨터에서 별표는 곱셈의 의미도 있지만 모든 것이라는 뜻도 있다.
→ ‘from 모듈명 import 수’: 해당 모듈 안에 있는 모든 사용 가능한 리소스를 호출
from fah_converter import
print(covert_c_to_f(41.6))
- 내장 모듈의 사용
- random 모듈→ 난수 생성 모듈
정수 모듈을 생성하는 randint() 함수 / 임의의 난수를 생성하는 random() 함수가 있다
import random
print(random.randint (0, 100)) # 0-100 사이의 정수 난수를 생성
print(random.random()) # 일반적인 난수 생성
- time 모듈
→ 일반적으로 시간을 변경하거나 현재 시각을 알려준다.
대표적으로 프로그램이 동작하는 현재 시각을 알 수 있다.
import time
print(time.localtimeO) # 현재 시각 출력
- urllib 모듈
→ 웹과 관련된 urllib 모듈은 웹 주소의 정보를 불러온다.
대표적으로 urllib의 request 모듈을 사용하면 특정 URL의 정보를 불러올 수 있다.
import urllib.request
response = urllib.request.urlopen("http://theteamlab.io")
print(response.read())
03 패키지 만들기
- 패키지의 구성
패키지 : 하나의 대형 프로젝트를 수행하기 위한 모듈의 묶음
모듈은 하나의 파일로 이루어져 있고, 패키지는 파일이 포함된 디렉터리(폴더)로 구성된다.
즉, 여러 개의 .py 파일이 하나의 디렉터리에 들어가 있는 것을 ‘패키지’라고 한다.
파이썬의 모듈을 구성할 때와 마찬가지로 패키지에도 예약어가 있다.
🙌 파일명 자체가 예약어를 반드시 지켜야만 실행되는 경우가 있다.
따라서 패키지 내의 몇몇 파일에는 _ _ init _ , _ _ main _ 등의 키워드 파일명이 사용된다.
- 패키지 만들기 실습
인터넷에서 주식 정보를 받아와 데이터베이스에 저장하고, 필요한 정보를 계산하는 프로그램
- 1단계 : 디렉터리 구성하기
패키지 이름 : ‘roboadvisor’ (패키지 이름 대부분은 소문자를 사용) roboadvisor 세 가지 기능
- crawling(크롤링): 주식 관련 데이터를 인터넷에서 가져오는 기능
- database(데이터베이스): 가져온 데이터를 데이터베이스에 저장하는 기능
- analysis(분석): 해당 정보를 분석하여 의미 있는 값을 뽑아내는 기능
⇒ 각 패키지 내에서 다시 세부 패키지에 맞춰 디렉터리를 구성
먼저 cmd 창에 다음 명령을 입력하여 디렉터리를 생성한다.
mkdir roboadvisor
cd roboadvisor
mkdir crawling
mkdir database
mkdir analysis
- 2단계 : 디렉터리별로 필요한 모듈 만들기
만들어진 디렉터리에 필요한 모듈을 만든다.
하나의 패키지는 중첩된 구조로 만들 수 있으므로 패키지 안에 또 패키지가 들어갈 수 있다.
하지만 각각의 디렉터리를 하나의 패키지로 선언하기 위해서는 예약된 파일을 만들어야 한다.
⇒ _ _ init _ _.py : 각 디렉터리가 패키지임을 나타내는 예약 파일
각 하위 패키지에 포함된 모듈에 필요한 기능을 구현
analysis 디렉터리에 있는 series.py와 statics.py에 들어갈 코드
def series_test():
print("series")
def statics_test():
print("statics")
실제로 사용하기 위해서는 파이썬 셸에서 다음과 같이 입력한다.
🙌 roboadvisor의 상위 디렉터리에서 파이썬 셸을 실행해야 정상적으로 수행
from roboadvisor.analysis import series
series.series_test()
- 3단계 : 디렉터리별로 _ _init _ _.py 구성하기
디렉터리별로 _ _ init _ _.py 파일을 구성
: 해당 디렉터리가 파이썬의 패키지라고 선언하는 초기화 스크립트
→ 패키지 개발자나 설치 시 확인해야 할 내용 등의 메타데이터 (패키지의 구조)
import analysis
import crawling
import database
__all__= ['analysis', 'crawling', 'database']
- 4단계: _ _ main _ _.py 파일 만들기
패키지를 한 번에 사용하기 위해 roboadvisor 디렉터리에 _ _ main _ _.py 파일을 만듦
→ 기본적으로 호줄해야 하는 여러 모듈을 from과 import문으로 호출한 후, if 구문 아래에 실제 실행 코드 작성
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
- 패키지 네임 스페이스
→ 패키지 내에서 모듈을 서로 호출할 때 사용
- 절대참조
→ 전체 패키지의 구조를 생각해 모듈의 경로를 모두 호출
일반적으로 패키지 내부에서 다른 패키지를 부를 때 가장 많이 사용하는 방법!
- 상대 참조
→ 호출하는 디렉터리를 기준으로 호출
But, 패키지 내에서는 상대 참조로 호출하는 것을 추천하지 않는다.
코드를 간략히 사용할 수 있다는 장점이 있지만,
패키지 전체를 보는 입장에서는 모든 패키지의 경로를 정확히 기록하는 것이 이해하기 쉽다.
04 가상환경 사용하기
- 가상환경의 개념
다른 개발자가 만든 패키지를 직접 사용하는 방법
→ 패키지를 설치할 때 다른 프로젝트가 영향을 주지 않도록 독립적인 프로젝트 수행 환경 구성
- 가상환경 설정하기
- 가상환경 만들기
→ my_project라는 이름의 가상환경을 python 3.4 버전으로 만들어라.# cmd 창에 입력 conda create -n my_project python=3.4 # conda -> 실행 명령어이고, create -> 가상환경을 만드는 인수, # -n my_project에서 -n : name의 줄임말, my_project : 구성할 가상환경 이름 # python=3.4 : 설치되는 파이썬의 버전
- 가상환경 실행하기
→ my_project라는 가상환경을 활성화하라는 뜻activate my.project
- 가상환경 실행하기
- 가상환경 만들기
구성된 가상환경의 이름을 activate 다음에 넣으면 해당 가상환경이 실행되고, 프롬프트 앞에 (my_project)라는 가상환경 이름이 붙는다. (해당 가상환경의 인터프리터만 실행)
where python
→ 현재 실행되는 파이썬의 위치가 어디인지 출력된다.
deactivate
→ 실행된 가상환경 종료
- 가상환경 패키지 설치하기
conda install matplotlib
→ conda install 다음에 패키지 이름을 넣는다.
- 가상환경 패키지 실습하기
matplotlib : 대표적인 파이썬 그래프 관리 패키지로, 엑셀과 같은 그래프를 화면에 출력
import matplotlib.pyplot as pit
pit.plot([1, 2, 3, 4])
# [<matplotlib.lines.Line2D object at 0x000001E8CC52C080>]
plt.ylabelfsome numbers')
# Text(0, 0.5, 'some numbers')
plt.show()
