[파이썬 기초] 6. 파이썬 모듈과 라이브러리
프로젝트가 커지고 코드가 커질수록 관리하기 어렵습니다. 앞서 살펴 본 클래스도 코드 관리를 수월하게 하기 위한 수단이었죠. 하지만 클래스를 쓰더라도 코드가 너무 길어지면 찾고 싶은 코드가 어딨는지 찾기 어렵고 관리하기 어려운건 매한가지 입니다. 그래서 코드가 길어지면 기능에 따라 여러 개의 파일로 나눠서 코드를 작성하게 됩니다.
오늘은 파이썬 코드를 여러 개의 파일에 나눠서 작성하고 하나의 파일에서 다른 파일의 코드들을 불러오는 방법에 대해 살펴보겠습니다.
1. 파이썬 모듈 관리
2. 파이썬 라이브러리
1. 파이썬 모듈 관리
파이썬 모듈 관리를 연습해보기 위해 작업할 폴더를 하나 만들어서 visual studio code에서 열어 보겠습니다.
'모듈 연습' 폴더를 만든 뒤, 그 안에 main.py와 module.py를 만들었습니다. main.py에서 module.py에 있는 코드들을 불러와서 사용할 겁니다.
우선 module.py에 몇 가지 코드를 간단히 작성해 보겠습니다.
# module.py
class ClassModule:
def __init__(self, a, b):
self.a = a
self.b = b
def printout(self):
print(f"a : {self.a}, b : {self.b}")
def sum(self):
return self.a + self.b
def get_alis(A):
alis = []
for i in range(1, A+1):
if A%i == 0:
alis.append(i)
return alis
module_variable1 = 3
module_variable2 = 5
module.py에는 클래스, 함수, 변수들을 정의했습니다. 이제 이를 main.py에서 불러와서 사용해 보도록 하겠습니다.
파이썬에서 다른 파이썬 코드를 불러오는 방법은 import 명령어를 사용하는 겁니다.
# main.py
from module import ClassModule, get_alis, module_variable1, module_variable2
module은 아까 코드를 작성했던 파이썬 파일의 이름(module.py)이었죠? 즉, 위 명령어는 module.py에 있는 메소드들을 불러오라는 명령어입니다. 만약 파일 이름이 다르다면 다른 이름을 from 옆에 적으면 되겠죠.
이렇게 불러오면 module.py의 메소드들을 main.py에서 마음껏 사용할 수 있습니다.
# main.py
from module import ClassModule, get_alis, module_variable1, module_variable2
module_class = ClassModule(module_variable1, module_variable2)
module_class.printout()
A = module_class.sum()
alis = get_alis(A)
print(alis)
별로 어렵지 않죠? 이런 식으로 코드를 여러 개의 파일에 나눠서 작성하고 사용하는 것이 가능합니다.
그런데 만약 파이썬 파일도 수가 너무 많아지면 찾기 힘들 수가 있습니다. 그럴 땐 폴더를 만들어서 비슷한 성격의 파일끼리 묶고 싶을 수 있죠. 당연히 폴더에 있는 파이썬 코드도 불러올 수 있습니다.
'module_folder' 라는 이름으로 폴더를 하나 만들어 보겠습니다. 그리고 그 안에 school.py 라는 파일을 만들어 볼게요.
school.py에는 아래와 같이 학교 출석부 클래스와 성적부 클래스 코드를 작성할 겁니다.
class StudentAttendance:
def __init__(self, student_list = []):
self.student_list = student_list
def call_attendance(self):
for i, student in enumerate(self.student_list):
print(f"{i+1}번 {student}")
def add_student(self, name):
self.student_list.append(name)
class StudentScore(StudentAttendance):
def __init__(self, student_list = []):
super().__init__(student_list)
self.scores = [-1] * len(self.student_list)
def write_score(self, name, score):
idx = self.student_list.index(name)
self.scores[idx] = score
def show_score(self):
for name, score in zip(self.student_list, self.scores):
print(f"{name} : {score}")
def add_student(self, name):
self.student_list.append(name)
self.scores.append(-1)
이제 main.py에서 이 클래스들을 불러와 보겠습니다.
# main.py
from module_folder.school import StudentAttendance, StudentScore
students = StudentScore()
students.add_student("동희")
students.add_student("민희")
students.write_score("동희", 80)
students.write_score("민희", 100)
students.show_score()
module_folder 폴더에 있는 school.py에 접근하기 위해 from 옆에 module_folder.school 이라고 작성했습니다. 이렇게 폴더 내의 파일이라는 것은 '.' 을 이용해 표시할 수 있습니다.
이렇게 module.py와 마찬가지로 school.py의 코드들도 main.py에서 잘 작동하는 것을 볼 수 있습니다. 별로 어렵지 않죠?
import와 관련된 몇 가지 문법을 조금 더 보겠습니다.
'*'을 사용하면 해당 파일의 모든 메소드들을 불러올 수 있습니다.
from module_folder.school import *
위와 같이 표기하면 module_folder의 school.py에 있는 모든 메소드들을 이름을 하나하나 작성하지 않고도 불러오는 것이 가능합니다.
아니면 아래와 같이 불러와서 사용하는 것도 가능합니다.
from module_folder import school
students = school.StudentScore()
from module_folder import school 을 통해 school.py 자체를 불러온 뒤, school.py의 메소드들은 아래 코드에서 '.'을 이용해 불러오는 것입니다. school.StudentScore()와 같이 말이죠.
2. 파이썬 라이브러리
지금까진 여러분이 직접 작성한 코드를 불러오는 방법에 대해 알아봤습니다. 그런데 파이썬은 남이 작성한 코드도 쉽게 불러올 수 있습니다!
코딩을 하다보면 자주 쓰게 되는 문법이나 코드들이 있을 겁니다. 이런 기능들이 필요할 때마다 여러분이 구현하면 귀찮겠죠? 그래서 이런 자주 사용되는 기능들은 이미 대부분 다른 사람들이 구현해 놓은 것이 있습니다. 이런 것들을 라이브러리라고 하는데 라이브러리를 불러오는 방법에 대해서 알아보겠습니다.
라이브러리를 불러오는 방법은 간단합니다. 여러분의 코드를 불러오는 것과 마찬가지로 import를 사용하면 됩니다.
import math
a = math.sqrt(49)
print(a)
b = math.ceil(3.2)
print(b) # 4
c = math.floor(3.2)
print(c)# 3
d = math.exp(10) # log_e^(10)
print(d)
위 코드를 실행해 보세요. 여러분이 math.py라는 파일을 만들지 않았더라도 실행이 잘 될겁니다.
math는 파이썬에서 기본적으로 제공하는 계산 코드 작성을 도와주는 라이브러리입니다.
- math.sqrt() : 제곱근 계산
- math.ceil() : 소숫점을 올림해 줍니다. (반올림이 아니고 그냥 무조건 올립니다.)
- math.floor() : 소숫점을 내림해 줍니다.
- math.exp() : $log_ex$ 계산을 해줍니다.
이 외에도 다양한 기능들이 있습니다. math와 관련된 다양한 기능들은 여기에서 확인할 수 있습니다.
기본 라이브러리를 하나 더 소개드리자면 os와 shutil도 유용하게 쓰실 수 있습니다. 이 둘은 파일, 폴더를 관리하는 라이브러리입니다.
import os, shutil
if not os.path.exists("test_folder"):
os.mkdir("test_folder")
if not os.path.exists("test_folder2"):
os.mkdir("test_folder2")
with open("test_folder/simple_text.txt", "w") as f:
f.write("hello world!")
shutil.copy("test_folder/simple_text.txt", "test_folder2/simple_text.txt")
print(os.listdir("test_folder"))
print(os.listdir("test_folder2"))
- os.path.exists() : 입력된 경로가 존재하는지 확인합니다.
- os.mkdir() : 입력된 이름으로 폴더를 생성해 줍니다.
- os.listdir() : 입력된 경로에 존재하는 파일 리스트를 출력해 줍니다.
- shutil.copy(a, b) : a 경로의 파일을 b 경로로 복사해 줍니다.
위 코드를 실행하면 현재 경로에 test_folder와 test_folder2 폴더를 만들고 각 폴더 아래에 simple_text.txt 라는 텍스트 파일을 만들게 됩니다.
코드를 위에서부터 보자면,
import os, shutil
if not os.path.exists("test_folder"):
os.mkdir("test_folder")
if not os.path.exists("test_folder2"):
os.mkdir("test_folder2")
os.path.exists()를 통해 해당 폴더가 존재하는지 확인하고, 존재하지 않는다면 os.mkdir()를 통해 test_folder, test_folder2 폴더를 새로 만듭니다.
with open("test_folder/simple_text.txt", "w") as f:
f.write("hello world!")
이 코드는 이전에 설명한 적이 없는데 파이썬에서 메모장 파일을 만들고 싶을 때 쓸 수 있는 코드입니다. (os, shutil과는 관계 없습니다.) test_folder에 simple_text.txt라는 이름으로 "hello world!"가 적힌 텍스트 파일을 만듭니다.
shutil.copy("test_folder/simple_text.txt", "test_folder2/simple_text.txt")
shutil.copy()를 이용해 "test_folder"의 "simple_text.txt" 파일을 "test_folder2"에 "simple_text.txt" 라는 이름으로 복사합니다.
print(os.listdir("test_folder"))
print(os.listdir("test_folder2"))
그리고 test_folder와 test_folder2에 있는 파일 리스트를 출력합니다. 그러면 ["simple_text.txt"] 가 2번 출력되고 마무리 될겁니다.
파일은 os.remove()를 통해 삭제할 수 있고 폴더는 shutil.rmtree를 통해 삭제할 수 있습니다.
os.remove("test_folder/simple_text.txt")
shutil.rmtree("test_folder2")
os와 shutil에 관련된 명령어들은 os와 shutil에서 확인할 수 있습니다.
지금까지 알아본 것들은 파이썬의 기본 라이브러리 였습니다. 하지만 이런 기능들 만으로는 부족할 겁니다. 프로그래밍을 하다 보면 더 다양한 기능들이 필요할 수도 있겠죠. 그럴땐 외부 라이브러리를 설치해서 사용하면 됩니다. 외부 라이브러리의 설치 방법은 간단합니다. 'pip install' 명령어를 코드가 아닌 명령어 창에 입력하면 됩니다!
그래프를 그리는데 많이 사용되는 라이브러리인 matplotlib을 설치해 보고 간단히 사용해 보겠습니다.
pip install matplotlib
위 명령어를 코드가 아닌 터미널에 입력하고 엔터를 쳐주세요!
그럼 막 이런저런 내용들이 나오면서 설치가 진행될 겁니다. 설치가 완료되면 이제 matplotlib을 이용해 코드를 작성할 수 있습니다.
main.py에 코드를 작성해 볼게요.
import matplotlib.pyplot as plt
student_names = ["David", "John", "Michell"]
student_scores = [82, 73, 90]
plt.bar(student_names, student_scores)
plt.show()
학생 이름과 시험 점수를 그래프로 표시하는 코드입니다. plt.bar()를 통해 학생 이름과 성적을 막대 그래프 형태로 그리고 plt.show()를 통해 그래프를 출력해 볼거에요.
코드를 실행하면 아래와 같이 화면이 뜰 겁니다.
짠! 신기하죠? matplotlib 라이브러리였습니다.
이런 식으로 파이썬 라이브러리에 대해서 알아봤습니다. 파이썬의 기본 라이브러리들은 설치 없이 그냥 사용할 수 있지만, 외부 라이브러리들은 pip install 명령어를 통해 설치하고 사용할 수 있어요. 그러면 여기서 이런 생각이 들 수 있습니다.
그러면 이런 라이브러리들의 종류와 명령어들은 또 따로 다 외워야 되나...?
답은 전혀 그렇지 않습니다. 그 많은 라이브러리들을 전부 외우고 사용하는건 무리입니다.
파이썬에 기본적으로 내장되어 있는 라이브러리는 아래 링크에서 확인할 수 있습니다.
https://docs.python.org/ko/3/library/index.html
The Python Standard Library
While The Python Language Reference describes the exact syntax and semantics of the Python language, this library reference manual describes the standard library that is distributed with Python. It...
docs.python.org
파이썬의 기본 라이브러리만 해도 종류가 굉장히 많죠? 근데 저도 이 중에서 아는 건 10개도 채 안되는 것 같습니다.
이런 라이브러리와 기능들은 전부 외우는 것이 아니라 그때 그때 필요할 때마다 검색해 보면서 익히는 겁니다. 원래 코딩은 제가 코드를 짜는 시간보다 구글링 하는 시간이 훨씬 많은 겁니다! 게다가 요즘은 chatGPT에 검색하면 코드도 짜 주는걸요.
그러니 이런 것들을 다 익혀야 한다고 생각하지 않으셔도 됩니다. 구글과 함께라면 저희는 뭐든지 다 할 수 있으니까요! 라이브러리를 설치하고 불러오는 방법만 잘 익혀두자구요.