표준 라이브러리

파이썬 표준 라이브러리(Python Standard Library)에는 수많은 유용한 모듈이 포함돼 있고 모든 표준 파이썬 배포판에 포함돼 있습니다. 이러한 표준 라이브러리가 할 수 있는 다양한 작업에 친숙하다면 대다수의 문제는 빠르게 해결할 수 있기 때문에 파이썬 표준 라이브러리에 친숙해지는 것이 중요합니다.

이번 장에서는 표준 라이브러리에서 널리 사용되는 모듈을 몇 가지 살펴보겠습니다. 파이썬 표준 라이브러리의 모든 모듈에 대한 자세한 사항은 파이썬 배포판에 포함돼 있는 문서의 'Library Reference' 섹션에서 확인할 수 있습니다.

그럼 몇 가지 유용한 모듈을 알아봅시다.

경고: 이번 장에서 다루는 내용이 너무 수준이 높다면 이번 장을 건너뛰어도 됩니다. 그렇지만 파이썬 프로그래밍에 익숙해지면 이번 장으로 되돌아와서 읽어보시길 적극 권장합니다.

sys 모듈

sys 모듈에는 시스템에 특화된 기능들이 포함돼 있습니다. 이미 앞에서 sys.argv 리스트에 명령줄 인수가 들어간다는 것을 확인한 바 있습니다.

현재 사용 중인 파이썬 소프트웨어의 버전을 확인하고 싶다면 sys 모듈을 통해 그러한 정보를 확인할 수 있습니다.

>>> import sys
>>> sys.version_info
sys.version_info(major=3, minor=6, micro=0, releaselevel='final', serial=0)
>>> sys.version_info.major == 3
True

동작 원리

sys 모듈에는 버전 정보를 제공하는 version_info 튜플이 있습니다. 첫 번째 항목은 메이저 버전입니다. 이 정보를 가져와 사용할 사용할 수 있습니다.

logging 모듈

프로그램이 기대한 대로 동작해왔는지 확인할 수 있게 어딘가에 디버깅 메시지나 중요 메시지를 저장하고 싶다면 어떻게 해야 할까요? 이러한 메시지를 어떻게 "어딘가에 저장"할까요? 이때 logging 모듈을 이용하면 됩니다.

다음 프로그램을 stdlib_logging.py라는 이름으로 저장합니다:

import os
import platform
import logging

if platform.platform().startswith('Windows'):
    logging_file = os.path.join(os.getenv('HOMEDRIVE'),
                                os.getenv('HOMEPATH'),
                                'test.log')
else:
    logging_file = os.path.join(os.getenv('HOME'),
                                'test.log')

print("Logging to", logging_file)

logging.basicConfig(
    level=logging.DEBUG,
    format='%(asctime)s : %(levelname)s : %(message)s',
    filename=logging_file,
    filemode='w',
)

logging.debug("Start of the program")
logging.info("Doing something")
logging.warning("Dying now")

출력 결과:

$ python stdlib_logging.py
Logging to /Users/swa/test.log

$ cat /Users/swa/test.log
2014-03-29 09:27:36,660 : DEBUG : Start of the program
2014-03-29 09:27:36,660 : INFO : Doing something
2014-03-29 09:27:36,660 : WARNING : Dying now

cat 명령어는 명령줄에서 'test.log' 파일을 읽는 데 사용됩니다. cat 명령어를 사용할 수 없다면 텍스트 편집기에서 test.log 파일을 열어도 됩니다.

동작 원리

예제에서는 표준 라이브러리에서 제공하는 3개의 모듈을 사용합니다. 바로 운영체제와 상호작용하기 위한 os 모듈과 플랫폼, 즉 운영체제에 관한 정보를 제공하는 platform 모듈, 정보를 로깅(log)하는 logging 모듈입니다.

먼저 platform.platform()(더 자세한 정보가 궁금하다면 import platform; help(platform)을 확인합니다)에서 반환하는 문자열을 검사해서 현재 사용 중인 운영체제가 무엇인지 확인합니다. 운영체제가 윈도우이면 홈 드라이브와 홈 폴더, 정보를 저장할 파일명을 확인합니다. 이러한 세 부분을 모두 종합해서 파일의 전체 경로를 구합니다. 다른 플랫폼에서는 사용자의 홈 폴더만 알면 파일의 전체 경로를 구할 수 있습니다.

os.path.join() 함수를 이용해 이러한 경로를 구성하는 세 부분을 모두 합칩니다. 그냥 문자열을 더하는 게 아니라 특별한 함수를 사용하는 이유는 이 함수는 전체 경로가 운영체제에서 기대하는 형식과 일치하도록 만들어주기 때문입니다. 참고로 여기서 사용하는 join() 메서드는 os 모듈의 일부라서 이 책의 다른 곳에서 사용한 문자열 메서드인 join()과 다릅니다.

다음으로 모든 메시지를 특별한 형식으로 앞에서 지정한 파일에 기록하도록 logging 모듈을 구성합니다.

마침내 디버깅 메시지나 정보 메시지, 경고 메시지, 치명적인 메시지를 저장할 수 있습니다. 프로그램이 실행되면 이 파일을 확인해서 심지어 프로그램을 실행하는 사용자에게 아무런 정보가 표시되지 않더라도 프로그램에서 어떤 일이 일어났는지 알 수 있습니다.

이번 주의 모듈 시리즈

표준 라이브러리에는 디버깅, 명령줄 옵션 처리, 정규 표현식 등과 같이 살펴봐야 할 것들이 많습니다.

표준 라이브러리를 둘러보는 가장 좋은 방법은 더그 헬먼(Doug Hellmann)의 이번 주의 파이썬 모듈(Python Module of the Week) 시리즈(으로도 만날 수 있습니다)와 파이썬 문서를 읽어보는 것입니다.

정리

이번 장에서는 파이썬 표준 라이브러리에서 제공하는 여러 모듈의 기능을 일부 살펴봤습니다. 사용 가능한 모든 모듈에 관해 알아보려면 파이썬 표준 라이브러리 문서를 둘러보기를 적극 권장합니다.

다음 장에서는 이번 파이썬 여정을 좀 더 완전하게 만들어줄 다양한 측면들을 다뤄보겠습니다.