파이썬

[Python] 모듈 - 파이썬 파일의 전부

책 읽는 개발자_테드 2022. 3. 28. 18:30
반응형

파이썬 프로그래밍를 읽고, 정리한 글입니다.

목차

· 모듈의 구성원과 처리 방법

· 외부 라이브러리 설치 및 사용

 

모듈의 구성원과 처리 방법


· 모듈(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()      # 응용 프로그램을 종료

결과

 

반응형