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

[1팀/한규림] 9주차 파이썬 스터디 - 모듈과 패키지

onegyul 2023. 5. 25. 14:35

9차시_강의안_모듈과패키지.pdf
1.31MB
9차시_과제_모듈과패키지.pdf
0.11MB

9주차 강의 주제는 파이썬 프로젝트의 기본이라고 할 수 있는 모듈과 패키지 입니다.

1. 모듈과 패키지의 이해

1) 모듈의 개념

모듈(module)은 프로그래밍 언어에서만 나오는 개념은 아니다. 자동차 부품이나 벽돌 등도 하나의 모듈 개념으로 제작되듯이 모듈은 이미 프로그래밍 언어 외에도 매우 다양하게 사용되고 있다.

  • 모듈 module : 작은 프로그램 조각을 뜻하며, 하나하나 연결해 어떤 목적을 가진 프로그램을 만들기 위한 작은 프로그램 각 모듈 역시 저마다의 역할이 있어 서로 다른 모듈과 인터페이스(interface)만 연결되면 사용할 수 있다.
  • 인터페이스 : 함수에서 매개변수를 입력하는 약속으로, 해당 모듈을 사용하기 위해서는 모듈 간의 연결을 위한 약속이 필요한데, 이를 인터페이스라고 한다.

파이썬에서도 이미 여러 번 모듈을 사용하였다. 내장 모듈은 파이썬에서 기본적으로 제공하는 모듈인데, 대표적으로 random 모듈이 있다. random 모듈은 난수를 쉽게 생성시켜 주는 모듈이다.

  • import random : import 구문은 뒤에 있는 모듈인 random을 사용할 수 있도록 호출하라는 명령어 randint( ) 함수 : 모듈 안에 있는 함수

2) 패키지의 개념

  • 패키지(packages) : 모듈의 묶음

from이라는 키워드를 사용해 모듈은 호출한 경우가 있는데, 이는 모듈을 호출하기 위해 패키지부터 호출하는 명령어이다.

다음 그림과 같이 하나의 패키지 안에 여러 개의 모듈이 있는데, 이 모듈들이 서로 포함 관계를 가지며 거대한 패키지를 만든다.

2. 모듈 만들기

1) 모듈 만들기 실습

모듈을 만드는 방법에 대해 알아보자. 파이썬에서는 .py 파일 자체가 모듈이다. 가장 쉽게 파이썬 모듈을 만드는 방법은 현재 실습 중인 디렉터리에서 .py 파일을 하나 만들고, 그 파일에 필요한 함수를 저장하면 된다. 그러면 다른 파이썬 파일이나 파이썬 셸에서 import문을 사용하여 해당 모듈의 함수를 쉽게 불러낼 수 있다.

  • fah_converter.py : 모듈을 만들어 저장하기
  • module_ex.py : 클라이언트 코드 작성하여 저장하기

기존에 만든 코드 파일의 이름만 입력하여 파일 내의 함수를 불러 사용할 수 있다. 즉, .py 자체가 하나의 모듈이 된다.

호출받는 모듈과 호출하여 사용하는 클라이언트 프로그램이 같은 디렉터리 안에 있어야 한다.

2) 네임스페이스

  • 네임스페이스(namespace) : 모듈 호출의 범위를 지정하는 것

클라이언트 프로그램의 함수 이름과 호출된 모듈의 함수 이름이 같은 경우가 발생할 수도 있는데, 이 경우 호출된 모듈의 사용 범위를 명확히 지정해야 한다. 이때 사용하는 개념이 네임스페이스이다.

네임스페이스를 만드는 방법에 대해 알아보자.

  1. 모듈 이름에 alias 를 생성하여 모듈 안으로 코드를 호출하는 방법

알리아스는 일종의 별칭으로 모듈의 이름을 바꿔 부를 때 사용한다.

as 키워드를 사용하여 모듈의 이름을 간단하게 바꿔 사용하면 된다.

현재 사용하는 클라이언트 프로그램에 같은 이름의 코드가 있더라도 모듈 내에서만 한정하여 호출해야 함

  1. from 구문을 사용하여 모듈에서 특정 함수 또는 클래스만 호출하는 방법

‘from 모듈명 import 모듈 안에 있는 함수명’의 형태로 작성하면 해당 모듈 안에 있는 함수를 가져다 사용할 수 있다. 주의할 점은 from은 꼭 모듈을 호출하기 위한 키워드가 아니라는 것이다.

  • 패키지를 호출하거나 해당 패키지 안에 있는 모듈을 호출할 때도 사용할 수 있음. from의 역할은 패키지와 패키지, 패키지와 모듈 간에 중첩 구조를 호출하는 것임.
  1. 해당 모듈 안에 있는 모든 함수, 클래스, 변수를 가져오는 별표( * )를 사용하는 것

‘from 모듈명 import *’은 해당 모듈 안에 있는 모든 사용 가능한 리소스를 호출한다는 뜻


알리아스를 생성하여 호출하는 방법을 가장 선호함. 각각의 함수나 클래스가 어디서 나오는지 명확히 표현하는 것이 좋기 때문.

3) 내장 모듈의 사용

**내장 모듈(built-in module)**에 대해 알아보자. 파이썬은 프로그래밍을 위해 기본적으로 사용해야 하는 문자처리, 웹, 수학 관련 다양한 내장 모듈을 제공하며, 별다른 조치 없이 import문 한 줄로 사용이 가능하다.

  1. random 모듈

난수 생성 모듈로, 정수 모듈을 생성하는 randint( ), 임의의 난수를 생성하는 **random( )**이 있음

import random
print(random.randint (0, 100))
print(random.random())
  1. time 모듈

시간과 관련된 모듈로, 일반적으로 시간을 변경하거나 현재 시각을 알려줌.

import time
print(time.localtime())
  1. urlib 모듈

웹 관련 모듈로, 웹 주소의 정보를 불러옴.

대표적인 request 모듈을 사용하면 특정 URL 정보를 불러올 수 있음

import urlib.request
response = urlib.request.urlopen("<http://theteamlab.io>")
print(response.read())

3. 패키지 만들기

1) 패키지의 구성

패키지는 하나의 대형 프로젝트를 수행하기 위한 모듈의 묶음이다. 모듈은 하나의 파일로 이루어져 있고, 패키지는 파일이 포함된 디렉터리(폴더)로 구성된다. 즉, 패키지는 여러 개의 .py 파일이 하나의 디렉터리에 들어가 있는 것을 말한다.

파이썬의 패키지에도 예약어가 있다. 주의할 점은 파일명 자체가 에약어를 반드시 지켜야만 실행되는 경우가 있다.

2) 패키지 만들기 실습

인터넷에서 주식 정보를 받아와 데이터베이스에 저장하고, 필요한 정보를 계산하는 프로그램의 패키지를 만들어보자.

  1. 디렉터리 구성하기

각 패키지 내에서 다시 세부 패키지에 맞춰 디렉터리를 구성하는 것을 말함

패키지 이름은 ‘roboadvisor’이다. 이 패키지의 기능은 크롤링, 데이터베이스, 분석이라고 하자.

  • crawling(크롤링) : 주식 관련 데이터를 인터넷에서 가져오는 기능
  • database(데이터베이스) : 가져온 데이터를 데이터베이스에 저장하는 기능
  • analysis(분석) : 해당 정보를 분석하여 의미 있는 값을 뽑아내는 기능

디렉터리 구성을 위해 cmd 창에 다음 명령을 입력하여 디렉터리를 생성한다.

mkdir roboadvisor
cd roboadvisor
mkdir crawling
mkdir database
mkdir analysis
  1. 디렉터리별로 필요한 모듈 만들기

만들어진 디렉터리에 필요한 모듈을 만든다. 각각의 디렉터리를 하나의 패키지로 선언하기 위해서는 예약된 파일을 만들어야 한다. 바로 __ init __.py이다.

  • __ init __.py : 각 디렉터리가 패키지임을 나타내는 예약 파일, 파일을 추가하면 패키지의 기본 구조가 만들어진다.

각 하위 패키지에 포함된 모듈에 필요한 기능을 구현하기 위해 코드를 작성한다.

  • **series.py, statics.py** : analysis 디렉터리에 있는 파일에 들어갈 코드. 실행 여부만 확인하기 위한 간단한 코드이다.

작성한 모듈을 실제로 사용하기 위해 파이썬 셸에 다음과 같이 입력한다. 이때 roboadvisor의 상위 디렉터리에서 파이썬 셸을 실행해야 정상적으로 수행된다.

from roboadvisor.analysis import series
print(series.series_test())
# series 출력

roboadvisor 디렉터리 안에 ‘__ pycache __’ 라는 디렉터리가 생성된다. 이 디렉터리에는 해당 프로그램이 작동될 때 사용하기 위한 모듈들의 컴파일 결과를 저장한다. 이렇게 디렉터리가 한번 생성되면 그 시점에서 해당 모듈을 수정해도 결과가 반영되지 않는다. 해당 프로그램 또는 파이썬 셸이 완전히 종료한 후 수정해야 해당 모듈의 결과가 반영된다. 인터프리터 언어이지만 내부적으로 컴파일 과정도 거치고, 효율적으로 사용하기 위한 여러 가지 과정을 거친다는 것을 기억하자.

  1. 디렉터리 별로 __ init __.py 구성하기

__ init __.py 은 해당 디렉터리가 파이썬의 패키지라고 선언하는 초기화 스크립트로, 파이썬의 거의 모든 라이브러리에 있다.

import analysis
import crawling
import database

__all__ = ['analysis', 'crawling', 'database']

roboadvisor 디렉터리에 있는 파일, 하위 패키지 이름을 입력하여 리스트형의 변수를 만든 후 각각 import문으로 호출함.

from . import series
from . import statics

__all__ = ['series', 'statics']
  1. __ main __.py 파일 만들기

패키지 자체를 실행하기 위해 만듦. 호출해야 하는 여러 모듈을 from, import문으로 호출한 후, if 구문 아래에 실제 실행 코드를 작성함.

  • __ main__.py 참고하기
  1. 실행하기 (패키지 이름만 호출)

모든 코드를 작성한 후 해당 패키지의 취상위 디렉터리에서 ‘python 패키지명’을 입력하여 실행한다.

python roboadvisor
series
parser

3) 패키지 네임스페이스

패키지 내에서 모듈을 서로 호출할 때 사용하는 패키지 네임스페이스(packages namespace)에 대해 알아보자.

패키지 네임스페이스는 크게 절대 참조와 상대 참조로 나눈다. 절대 참조는 전체 패키지의 구조를 생각해 모듈의 경로(path)를 모두 호출하는 것이고, 상대 참조는 호출하는 디렉터리를 기준으로 호출하는 것이다.

  1. 절대 참조
from roboadvisor.analysis improt series
  • reference1.py : 다른 서브 모듈에서 모듈을 쉽게 호출할 수 있음
  • from 전체 패키지.서브 패키지 import 모듈
  1. 상대 참조
  • 상대 참조의 핵심은 현재의 디렉터리를 기준으로 모듈을 호출하는 것이다.
  • reference2.py

4. 가상환경 사용하기

1) 가상환경의 개념

파이썬에서는 가상환경이라는 개념으로 프로젝트 패키지를 관리하는 도구를 제공한다.

일반적으로 어떤 프로젝트를 수행할 때는 파이썬 코드를 수행할 기본 인터프리터뿐만 아니라 프로젝트별로 필요한 추가 패키지까지 설치해야 한다. 이러한 패키지를 설치할 때 서로 다른 프로젝트가 영향을 주지 않도록 독립적인 프로젝트 수행 환경을 구성할 수 있는데, 이를 ‘가상환경’이라고 한다. 이 가상환경을 구축하기 위해 패키지 관리 도구를 사용한다.

  • virtualenv : 파이썬에서 기본적으로 제공하는 가상환경 도구, pip로 새로운 패키지 설치 가능
  • conda : miniconda 전용 패키지 관리 도구로 가상환경 관리와 패키지 설치를 같이할 수 있음

2) 가상환경 설정하기

  1. 가상환경 만들기
conda create -n my_project python=3.4
  • conda : 실행 명령어, create : 가상환경을 만드는 인수 -n : name의 줄임말, my_project : 구성할 가상환경 이름 python=3.9 : 설치되는 파이썬의 버전
  1. 가상환경 실행하기
activate my_project

my_project 가상환경 활성화하라는 코드이다. 이제부터는 해당 가상환경의 인터프리터만 실행된다.

  • where python : 실행되는 파이썬 위치 출력
  • deactivate : 가상환경 종료
  1. 가상환경 패키지 설치하기
conda install matplotlib
  • matplotlib : 대표적인 그래프 관리 패키지
  1. 가상환경 패키지 실습하기
  • matplotlib 활용하여 그래프 출력 연습하기
improt matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4])
plt.ylabel('some numbers')
plt.show()