[Python] 모듈 - 파이썬 파일의 전부
파이썬 프로그래밍를 읽고, 정리한 글입니다.
목차
· 모듈의 구성원과 처리 방법
· 외부 라이브러리 설치 및 사용
모듈의 구성원과 처리 방법
· 모듈(module)이란?
- 함수나 변수 또는 클래스를 모아 놓은 파일이다. 다른 파이썬 프로그램에서 불러와 사용할 수 있게끔 만든 파이썬 파일이라고도 할 수 있다.
- 이러한 모듈을 보조기억장치에 저장하면 Python 파일(.py)로 저장된다. 모듈은 하나의 물리적인 파일이라 할 수 있다.
· 사용목적: 모듈을 사용하면 논리적으로 파이썬 코드를 구성할 수 있다. 서로 관련 있는 소스 코드를 모듈로 그룹화하면 코드를 더 쉽게 이해하고 사용할 수 있다.
· 패키지란? - 서로 관련 있는 여러 개의 모듈을 같은 폴더 내에 파일로 저장하는데 이러한 폴더를 패키지라고 부른다.
· 라이브러리란? - 여러 개의 모듈이나 패키지의 묶음
· 제공자에 따른 모듈의 구분:
1. 표준 모듈(내장 모듈): 파이썬을 설치하면 기본으로 제공
2. 사용자 작성 모듈: 일반 프로그래미가 작성한 모듈
- Third party 모듈: 전문 회사나 개인이 만들어 제공하는 모듈
· 기본적으로 지원되는 내장 모듈은 프로그램이 실행될 때 자동으로 로딩된다. 기본 모듈 외에 다른 모듈은 import 문을 사용하여 메모리로 로딩해야 한다.
· 파이썬이 import 문으로 원하는 모듈을 메모리로 로딩할 때 읽어들이는 순서:
1. 해당 프로그램이 실행된 디렉토드
2. PYTHONPATH 환경 변수에 등록된 디렉토리
3. 표준 모듈 디렉토리(파이썬을 설치하면 작성됨)
- 경로 탐색 우선순위는 sys.path로 확인할 수 있다.
내장 모듈 사용하기
print('모듈 사용하기')
import sys # sys 모듈의 멤버를 사용할 수 있게 된다.
print("모듈 경로: ",sys.path)
print()
# 수학 함수 읽기
import math
print("원주율(pi):",math.pi)
print("sin(30):",math.sin(math.radians(30)))
print()
# 달력 출력
import calendar
calendar.setfirstweekday(6) # 일요일을 첫 요일로 설정 (0:월, 1:화, ... ,6:일)
calendar.prmonth(2022,3) # 출력 날짜를 설정
del calendar # calendar 객체 삭제
print()
# 작업 경로 관련 정보 얻기
import os
print(os.getcwd()) # 현재 작업 경로 반환
print(os.listdir('/')) # root 내의 파일 목록 반환
· 파이썬 내장 모듈의 종류
내장 모듈 | 설명 |
sys | 파이썬 시스템과 인터페이스 관련 모듈 |
os | 운영 체제 관련 모듈 |
string | 문자열 관련 모듈 |
re | 정규표현식 처리용 모듈 |
math | 수학 관련 모듈 |
time | 날짜 및 시간 관련 모듈 |
사용자 정의 모듈 작성 및 읽어 오기
· 사용자 정의 모듈을 작성한 후 이를 활용하는 소스 코드를 작성하자.
파이썬 프로젝트에 다음과 같은 구조로 패키지와 모듈을 만든다.
'사용자정의모듈', '사용자정의모듈other' 패키지를 생성한다. '사용자정의모듈' 패키지에는 module_tesy.py, mymod1.py 파일을 작성한다. '사용자정의모듈other' 패키지에는 module_test2.py, mymod2.py 파일을 작성한다.
mymod1.py
tot = 123
def listAdd(*ar):
print(ar)
def ted():
print('모스비')
def robin():
print('슈바스키')
mymod2.py
def add(a, b):
return a + b
def subtract(a, b):
return a - b
파이썬 설치 파일이 있는 python3 폴더에 mymod3.py 파일을 작성한다.
mymod3.py
def multiply(a, b):
return a * b
Python path가 설정되어 있는 않은 임의의 폴더에 mymod4.py 파일을 작성한다.
mymod4.py
def divide(a, b):
return a / b
사용자 정의 모듈 읽기
· import 명령어로 같은 패키지에 저장된 mymod1.py 파일의 사용자 정의 모듈 읽기 연습을 해보자.
'사용자정의모듈' 패키지에 다음 파일을 작성하고, 실행한다.
module_test.py
print('경로지정 방법 1 -> import 패키지명.모듈명')
import 모듈.사용자정의모듈.mymod1 # module_test 파일과 같은 패키지에 있어도 패키지명은 적어 준다.
print(dir(모듈.사용자정의모듈.mymod1)) # mymod1에 정의된 멤버 목록을 확인
print()
print('mymod1의 함수 호출')
list1 = [1, 3]
list2 = [1, 2]
모듈.사용자정의모듈.mymod1.listAdd(list1, list2)
print()
print('경로지정 방법 2 -> from 패키지명 import 모듈명')
from 모듈.사용자정의모듈 import mymod1
mymod1.ted() # ted 함수를 모듈명.함수명()으로 호출
print('다른 모듈의 전역변수 읽기 tot: 'mymod1.tot) # 모듈명.변수
print()
print('경로지정 방법 3 -> from 패키지명.모듈명 import 함수명, ...변수, ...')
from 모듈.사용자정의모듈.mymod1 import robin
robin() # 함수명()만 적어도 호출 가능
다른 패키지에 저장된 모듈 읽기
· 메인 모듈 파일이 저장된 패키지가 아닌 다른 패키지에 저장된 파일의 모듈 읽기 연습을 해 보자.
'사용자정의모듈other' 패키지에 다음 파일을 작성하고, 실행한다.
module_test2.py
import 모듈.사용자정의모듈other.mymod2 # 메인 파일과 패키지가 다른 위치이므로 import를 한다.
add = 모듈.사용자정의모듈other.mymod2.add(5, 3) # 패키지명.모듈명.함수명()으로 호출한다.
print('합:',add)
print('차:',모듈.사용자정의모듈other.mymod2.subtract(5,3))
from 모듈.사용자정의모듈other.mymod2 import add, subtract # from ... import 모듈멤버, ... 처럼 나열하면,
print('합:',add(5, 3)) # 모듈명 없이 함수명()으로 실행한다.
print('차:', subtract(5, 3))
print('Pythonpath가 설정된 폴더의 모듈 읽기 연습')
import mymod3
print('곱:', mymod3.multiply(5, 3))
from mymod3 import * # *을 주면 호출되는 모듈의 모든 멤버가 호출 대상이 된다.
print('곱:', multiply(5, 3))
print('전혀 연관 없는 폴더')
import sys
sys.path.append(r'C:/Users/tlatm/Desktop/work') # 전혀 경로 설정과 관련 없는 폴더를 path에 추가
import mymod4
print('나누기:', mymod4.divide(5, 3))
패키지 인식용 __init__.py 파일
· __init__.py 파일은 패키지와 관련된 파일로 시스템이 사용한다. 디렉터리가 패키지로 인식되도록 하며, 패키지를 초기화하는 역할을 한다.
· import로 패키지를 로딩하면 __init__.py 파일이 실행되므로 패키지 내의 파일에 대한 설정 작업 등을 할 수 있다.
· __init__.py 파일이 없어도 패키지로 인식하지만, 하위 버전 호환을 위해 패키지 내에 해당 파일을 생성하는 것이 안전한다. (파이썬 3.3이전 버전에서는 init 파일이 필수였다)
명시적으로 메인 모듈 선언하기
· 모듈은 다른 모듈을 호출해서 사용할 수 있는 구조로, 복수의 모듈을 계층관계로 만들어 실행할 경우 현재 사용하고 있는 모듈이 다른 모듈에 종속되어 import된 것인지, 응용 프로그램의 시작점인 메인 모듈로 실행되는 모듈인지 명시적으로 표현할 수 있다.
· 메인 모듈의 참/거짓 여부는 __name__=="__main__"으로 확인 가능하다.
- __name__ =="__main__"은 인터프리터에서 직접 실행했을 경우에만 if문 내의 코드를 실행하라는 명령이 된다.
- __name은 인터프리터가 만들어 둔 글로벌 변수다.
def func():
print('프로그램 실행')
if __name__=="__main__": # 메인 모듈에서 응용 프로그램이 시작된 경우 True 반환
func()
외부 라이브러리 설치 및 사용
· 파이썬 프로그램을 설치할 때 등록되지 않은 외부 라이브러리는 별도로 설치해야 사용할 수 있다. 외부 라이브러리를 설치하는 두 가지 방법을 알아보자. 설치할 외부 라이브러리는 pygame이다.
- pygame: SDL(Simple DirectMedia Layer) 라이브러리에 내장된 게임과 같은 멀티미디어 멀티미디어 응용 프로그램을 만들기 위한 오픈 소스 라이브러리(https://www.pygame.org/news)
pip을 통해 pygame 라이브러리 설치하기
· pip은 파이썬으로 작성된 패키지 소프트웨어를 설치 · 관리하는 패키지 관리 시스템이다.
· pip을 통해 다운로드한 라이브러리는 파이썬 설치 경로에 자동으로 등록된다.
· 사용법: 윈도우 명령 프롬프트 창에 다음과 같이 입력한다.
· 예시 - pygame 라이브러리 설치하기
윈도우 명령 프롬프트 창을 열고 다음과 같이 입력한다.
pip install pygame
설치가 완료되면 ~\Lib\site-package 폴더에 저장된다.
파이참을 통해 pygame 라이브러리 설치하기
· 파이참 사용자는 파이참의 [Python Interpreter]에서 직접 pygame을 다운로드받아 등록할 수 있다.
1. 파이참 메뉴에서 [File] - [Settings]를 선택하면, 다음 화면이 나타난다. [Project] - [Python Interpreter]를 선택하고, [+] 버튼을 클릭한다.
2. 나타나는 'Available Packages' 창에서 검색 입력란에 pygame을 입력한다. pygame이 보이면 선택하고 [Install Package] 버튼을 클릭하여 설치한다.
pygame 모듈 사용하기
import pygame
import sys
pygame.init() # pygame 관련 값을 초기화
windowSurface = pygame.display.set_mode((400, 300)) # 너비와 높이가 지정된 윈도우 객체(게임 스크린) 생성
pygame.display.set_caption('파이게임') # 게임 스크린의 제목을 적어둠
windowSurface.fill(color=(255, 255, 255)) # 게임 스크린의 기본 설정인 검정색 바탕을 흰색으로 변경한다.
# 원 그리그: 좌표 (100, 150)을 중심으로 하는 반지름 30인 원을 그린다.
pygame.draw.circle(surface=windowSurface, color=(255,0,0), center=(100, 150), radius=30)
pygame.display.update() # 설정한 도형을 출력하기 위해 윈도우 화면을 갱신
while True: # while 조건이 참인 동안 게임 루프 처리
for event in pygame.event.get(): # 게임 도중 발생하는 이벤트를 받는다.
if event.type == pygame.QUIT: # 이벤트 중 윈도우의 닫기 버튼을 누른다.
pygame.quit() # 게임을 종료
sys.exit() # 응용 프로그램을 종료