모든 파이썬 프로그래머를 위한 20가지 실용적인 파이썬 라이브러리
파이썬 프로그래밍 언어의 대성공을 이끈 힘은 무엇일까? 물론 답은 네이티브와 서드파티 라이브러리를 가리지 않는 풍부한 파이썬용 라이브러리다. 문제는 파이썬 라이브러리가 워낙 많은 탓에 유용한 라이브러리가 사람들의 관심을 받지 못하고 묻히는 부작용도이다. 또한 한 영역에서만 작업하는 프로그래머들은 다른 종류의 작업에서 사용할 수 있는 라이브러리에 대해서는 잘 모르는 경우가 많다.
여기서는 파이썬 프로그래머라면 관심을 가질 만한 20가지 파이썬 라이브러리를 선정했다. 파일 시스템 액세스, 데이터베이스 프로그래밍, 클라우드 서비스 작업과 간단한 웹 앱 구축, GUI 생성, 이미지, 전자책, 워드 파일 작업에 이르기까지 다양한 작업을 간소화하는 유용한 라이브러리다. 이 중에는 유명한 라이브러리도 있고 잘 알려지지 않은 라이브러리도 있지만, 모두 파이썬 개발자 툴박스의 한 자리를 차지할 가치가 있다는 점만은 확실하다.
아파치 Libcloud
Libcloud의 기능 : 하나의 일관된 통합 API를 통해 여러 클라우드 서비스 업체에 액세스한다.
Libcloud를 사용하는 이유: 아파치 Libcloud에 대한 위의 설명을 보고 환호하지 않는다면, 아마 여러 클라우드로 작업한 적이 없는 사람일 것이다. 클라우드 서비스 업체는 모두 각자의 방법을 선호한다. 따라서 10여 개의 업체를 아우르는 통합 메커니즘이 있다면, 많은 시간을 절약하고 골치아픈 문제를 피할 수 있다. 컴퓨팅, 스토리지, 로드밸런싱, DNS를 위한 API가 있으며 파이썬 2.x와 파이썬 3.x, 그리고 파이썬을 위한 고성능 JIT 컴파일러인 파이파이(PyPy)를 지원한다.
애로우(Arrow)
애로우의 기능 : 파이썬에서 날짜와 시간을 깔끔하게 처리한다.
애로우를 사용하는 이유 : 시간대, 날짜 변환, 날짜 형식 등을 다루는 일만 해도 이미 충분히 골칫거리다. 여기에 날짜/시간 작업을 위한 파이썬의 표준 라이브러리가 더해지면 골칫거리가 하나 더 늘어난다.
애로우는 4가지 큰 장점을 제공한다. 첫째, 애로우는 파이썬 datetime 모듈을 대체한다. 즉, .now() 및 .utcnow()와 같은 일반적인 함수 호출이 예상 가능한 방식으로 동작한다. 둘째, 애로우는 시간대 이동이나 변환과 같은 흔히 필요한 작업을 위한 메소드를 제공한다. 셋째, 애로우는 “인간 친화적인” 날짜/시간 정보를 제공한다. 예를 들어 “한 시간 전에“ 일어난 일이나 “두 시간 후”에 일어난 일을 어려움 없이 기술할 수 있다. 넷째, 애로우는 힘들이지 않고도 날짜/시간 정보를 현지화할 수 있다.
비홀드(Behold)
비홀드의 기능 : 파이썬에서 print 스타일의 디버깅을 충실히 지원.
비홀드를 사용하는 이유 : 파이썬에서 디버깅을 하는 간단한 방법(사실 모든 프로그래밍 언어가 마찬가지)은 인라인 print 문을 삽입하는 것이다. 작은 프로그램에서는 당연히 print 디버깅이 최선의 선택이지만, 크고 광범위한 다중 모듈 프로젝트 내에서는 유용한 결과를 얻기가 쉽지 않다.
비홀드는 print 문을 통한 컨텍스트 디버깅을 위한 툴킷을 제공한다. 출력에 일관된 모양을 적용하고 결과에 태그를 붙여 검색 또는 필터를 통해 정렬이 가능하도록 하고, 여러 모듈에 걸쳐 컨텍스트를 제공해서 한 모듈에서 만들어진 함수를 다른 모듈에서 디버깅할 수 있게 해준다. 비홀드는 객체의 내부 사전 인쇄, 중첩된 특성 노출, 디버깅 도중에 결과를 저장하고 다른 출력에서 비교를 위해 재사용하기 등 많은 일반적인 파이썬 시나리오에서 효력을 발휘한다.
보틀(Bottle)
보틀의 기능 : 가볍고 빠른 웹 앱
보틀을 사용하는 이유: 간단히 RESTful API를 사용하거나 웹 프레임워크의 골격을 사용해서 앱을 구축하려는 경우 강력하면서 작은 용량의 보틀만 있으면 된다. 라우팅, 템플릿, 요청 및 응답 데이터 액세스, 전통적인 CGI를 위시한 여러 서버 유형 지원, 웹소켓과 같은 고급 기능 지원까지 모두 포함된다. 작업 시작을 위해 필요한 작업의 양도 최소한이다. 또한 고급 기능이 필요할 때 매끄럽게 확장이 가능하도록 설계됐다.
EbookLib
EbookLib의 기능 : .epub 파일 읽기 및 쓰기.
EbookLib을 사용하는 이유 : 전자책을 만들려면 일반적으로 이런저런 명령줄 도구와 씨름해야 한다. EbookLib은 프로세스를 간소화하는 관리 툴과 API를 제공한다. EPUB 2와 EPUB 3 파일을 지원하며 킨들도 지원 예정이다.
이미지와 텍스트(텍스트는 HTML 형식)를 제공하면 EbookLib이 이러한 조각을 조합하고 챕터, 중첩된 목차, 이미지, HTML 마크업 등을 사용해 전자책을 완성한다. 표지, 책등, 스타일시트 데이터도 모두 지원된다. 플러그인 시스템을 사용해 써드 파티에서 라이브러리의 동작을 확장할 수 있다.
EbookLib의 모든 기능이 필요한 것은 아니라면 Mkepub이 있다. Mkepub은 기본적인 전자책 구성 기능을 몇 KB의 작은 라이브러리 하나로 결합해 제공한다. Mkepub의 소소한 단점은 Jinja2가 필요하다는 것이다. Jinja2에는 다시 MarkupSafe 라이브러리가 필요하다.
구이(Gooey)
구이의 기능 : 콘솔 기반 파이썬 프로그램에 플랫폼 네이티브 GUI를 제공한다.
구이를 사용하는 이유 : 사용자, 특히 일반 사용자에게 명령줄 인터페이스를 내미는 것은 애플리케이션 사용 의지를 꺾는 첩경이다. 여간한 괴짜가 아닌 한 어떤 옵션을 어떤 순서로 전달할지 알아내는 데서 즐거움을 느끼는 사람은 거의 없다. 구이는 argparse 라이브러리에서 인식하는 인수를 취해 WxPython 라이브러리를 거쳐 GUI 형식으로 사용자에게 제시한다. 모든 옵션은 적절한 컨트롤(예를 들어 다중 옵션 인수를 위한 드롭다운 등)과 함께 레이블이 붙어 표시된다. 이미 argparse를 사용하고 있다면 부가적으로 필요한 코딩은 거의 없다(include 하나와 decorator 하나).
인보크(Invoke)
인보크의 기능 : “파이썬형 원격 실행”, 즉 파이썬 라이브러리를 사용해서 관리 작업을 수행한다.
인보크를 사용하는 이유 : 파이썬을 일반 셸스크립팅 작업 대용으로 사용하는 데는 큰 이점이 따른다. 인보크는 셸 명령을 실행하고 명령줄 작업을 파이썬 함수처럼 관리하기 위한 고수준 API를 제공, 이런 작업을 코드에 내장하거나 매끄럽게 쌓아 올릴 수 있게 해준다.
누이트카(Nuitka)
누이트카의 기능 : 파이선을 독립적인 C 실행 파일로 컴파일한다.
누이트카를 사용하는 이유 : 사이썬(Cython)과 마찬가지로 누이트카는 파이썬을 C로 컴파일한다. 단, 사이썬은 최선의 결과를 위해 자체 맞춤형 구문이 필요하고 주로 수학 및 통계 애플리케이션에 초점을 두는 반면, 누이트카는 모든 파이썬 프로그램을 있는 그대로 C로 컴파일하고 단일 실행 파일을 생성하며 이 과정에서 가능한 경우 최적화를 적용한다. 누이트카는 개발 초기 단계이며 계획된 최적화 기능의 상당수가 아직 구현되지 않았다. 그러나 파이썬 스크립트를 빠른 명령줄 앱으로 변환할 때 편리하게 사용할 수 있다.
눔바(Numba)
눔바의 기능: 연산 집약적인 함수의 속도를 선별적으로 높인다.
눔바를 사용하는 이유 : 파이썬 세계에는 수학 연산 속도를 높이기 위한 패키지 하위 문화가 존재한다. 예를 들어 넘파이(NumPy)는 고속 C 라이브러리를 파이썬 인터페이스로 래핑하며 사이썬은 성능 가속을 위한 선택적 형식 지정을 적용해 파이썬을 C로 컴파일한다. 그러나 눔바는 데코레이터 하나로 파이썬 함수를 선별적으로 가속화할 수 있으므로 단연 가장 편리한 방법이다. 속도를 더 높이려면 일반적인 파이썬 관용구를 사용해서 워크로드를 병렬화하거나 SIMD 또는 GPU 명령어를 사용하면 된다. 넘파이와 눔바를 함께 사용할 수 있지만 많은 경우 눔바의 성능이 넘파이보다 몇 배 앞선다.
피위(Peewee)
피위의 기능 : 작은 ORM(Object-Relational Mapper, 객체-관계 매퍼)로, SQLite, 마이SQL, 포스트그레SQL을 지원하며 확장 기능이 풍부하다.
피위를 사용하는 이유 : 모두가 ORM을 좋아하는 것은 아니다. 스키마 모델링을 데이터베이스 측에 두는 편을 선호하는 사람도 있다. 그러나 데이터베이스에 손대고 싶지 않은 개발자에게 잘 만들어진 간소한 ORM은 반가운 선물이다. 또한 SQL 알케미(Alchemy)와 같은 무거운 ORM을 원하지 않는 개발자에게는 피위가 적합하다.
피위 모델은 구성, 연결, 조작이 쉽다. 또한 pagination 함수와 같은 일반적인 쿼리 조작 함수의 상당수가 내장돼 있다. 다른 데이터베이스와 테스트 툴, 스키마 마이그레이션 시스템을 위한 확장 기능을 비롯한 애드온 형태로 더 많은 기능을 사용할 수 있다. ORM을 좋아하지 않는 사람이라도 반할 수밖에 없는 기능이다. 참고로 피위 3.x 분기(권장 에디션)는 이전 피위 버전과 완벽한 하위 호환성을 제공하지는 않는다.
필로우(Pillow)
필로우의 기능 : 손쉬운 이미지 처리
필로우를 사용하는 이유 : 이미지 처리 경험이 있는 파이썬 개발자는 대부분 PIL(Python Imaging Library, 파이썬 이미지 라이브러리)에 익숙하겠지만, PIL은 단점과 제한이 많고 업데이트도 자주 되지 않는다. 필로우의 목적은 최소한의 변경으로 더 쉬운 사용과 PIL과의 코드 호환성, 두 가지 모두를 달성하는 데 있다. 네이티브 윈도우 이미징 기능과 파이썬의 Tcl/Tk 기반 Tkinter GUI 패키지를 조작하기 위한 확장 기능이 포함되어 있다. 필로우는 깃허브 또는 PyPI 리포지토리를 통해 제공된다.
파이파일시스템(PyFilesystem)
파이파일시스템의 기능 : 모든 파일 시스템에 대한 파이썬 방식의 인터페이스
파이파일시스템을 사용하는 이유: 파이파일시스템의 기본 개념은 지극히 단순하다. 파이썬의 file 객체가 하나의 파일을 추상화하듯이 파이파일시스템의 FS 객체는 전체 파일 시스템을 추상화한다. 디스크 파일 시스템뿐만 아니라 FTP 디렉토리, 메모리 내 파일 시스템, OS에 의해 정의된 위치의 파일 시스템(사용자 디렉토리 등), 그리고 상기한 항목을 서로 겹친 조합까지 지원한다.
파일을 조작하는 크로스 플랫폼 코드를 더 쉽게 작성할 수 있다는 것 외에도 파이파일시스템은 표준 라이브러리(주로 os와 io)의 개별 부분에서 가져온 스크립트를 엮지 않아도 된다. 또한 콘솔에 적합한 파일 시스템의 트리 뷰를 인쇄하기 위한 툴과 같은 유틸리티도 제공하므로 일일이 새로 만들 필요가 없다.
파이게임(Pygame)
파이게임의 기능 : 파이썬으로 비디오 게임 또는 게임급의 프론트엔드를 만든다.
파이게임을 사용하는 이유 : 게임 개발 분야를 벗어나면 이런 프레임워크를 사용할 사람은 없다. 파이게임은 GUI 기반의 다양한 동작을 간편히 처리할 수 있게 해준다. 덕분에 그림 캔버스와 스프라이트 그래픽, 멀티채널 사운드 작업, 창 및 클릭 이벤트 처리, 충돌 감지 등 많은 고난도 작업을 피할 수 있다. 물론 파이게임을 사용해 구축하는 방법이 별 효과가 없는 앱도 있지만(GUI 앱의 경우도 마찬가지), 파이게임이 제공하는 기능은 분명 관심을 가질 만하다. 생각한 이상일 수도 있다!
파이글릿(Pyglet)
파이글릿의 기능 : 순수 파이썬을 사용한 크로스 플랫폼 멀티미디어 및 창 그래픽
파이글릿을 사용하는 이유: 파이글릿은 창 기능, OpenGL 그래픽, 오디오 및 비디오 재생, 키보드 및 마우스 처리, 이미지 파일 작업 등 GUI 애플리케이션을 위해 일일이 구현하기 지루한 항목에 액세스할 수 있는 편리한 방법을 제공한다. 단, 파이글릿은 버튼, 툴바, 메뉴와 같은 UI 위젯을 제공하지 않는다.
모두 윈도우, OS X 또는 리눅스의 네이티브 플랫폼 기능을 통해 구현되므로 바이너리 종속성이 없다. 파이글릿은 순수 파이썬이다. 또한 BSD 라이선스로 배포되므로 모든 상용 또는 오픈소스 프로젝트에 포함할 수 있다.
파이인스톨러(PyInstaller)
파이인스톨러의 기능 : 파이썬 스크립트를 독립 실행 파일로 패키징한다.
파이인스톨러를 사용하는 이유 : 파이썬에 관한 흔한 불만 사항 중 하나는 다른 사용자에게 스크립트를 배포하기가 필요 이상으로 어렵다는 점이다. 파이인스톨러는 파이썬 스크립트(넘파이와 같은 바이너리부터 복잡한 서드파티 모듈을 포함하는 스크립트까지)를 패키징해서 단일 폴더 또는 단일 파일 애플리케이션으로 배포할 수 있게 해준다. 파이인스톨러는 이 폴더나 파일에 실제 필요한 항목 이상을 넣는 경향이 있으므로 최종 결과물이 비대해질 수 있다. 그러나 이 경향은 연습을 통해 극복할 수 있으며, 뛰어난 편의성을 제공한다는 사실은 부정할 수 없다.
파이심플GUI(PySimpleGUI)
파이심플GUI의 기능 : 성가신 작업을 최소화하면서 파이썬으로 GUI를 만든다.
파이심플GUI를 사용하는 이유 : 파이썬에는 GUI를 만들기 위한 Tkinter 라이브러리가 포함되지만, Tkinter는 사용하기가 쉽지 않다. 파이심플GUI는 훨씬 더 간소한 API로 Tkinter를 래핑한다. 간단한 대화상자나 팝업 메뉴와 같은 일반적인 효과의 상당수를 코드 한 줄로 만들 수 있다. 다만 인터페이스는 여전히 전형적인 Tkinter 형태다. 더 세련된 모양과 느낌을 원한다면 다른 툴을 선택하는 편이 좋다.
파이썬-docx
파이썬-docx의 기능 : 마이크로소프트 워드 .docx 파일을 프로그램을 통해 조작한다.
파이썬-docx를 사용하는 이유 : 이론적으로는 XML 스타일의 마이크로소프트 워드 문서는 손쉽게 만들고 업데이트할 수 있어야 한다. 그러나 현실에서는 결코 간단하지 않다. .docx 형식 내부의 온갖 복잡성 때문이다. 파이썬-docx는 .docx 파일을 다루기 위한 고수준 API를 제공함으로써 모든 복잡성을 피해갈 수 있게 해준다.
파이썬-docx로 텍스트, 이미지, 표, 스타일, 문서 섹션, 머리글 및 바닥글을 추가하거나 변경할 수 있다. 라이브러리를 사용하면 새 문서를 만들거나 기존 문서를 변경할 수 있다. 파이썬-docx는 워드 파일에서 원시 텍스트를 끌어오거나 워드 자체의 내장된 자동화 기능을 피하고자 하는 경우 유용하다.
스크래피(Scrapy)
스크래피의 기능 : 화면 스크랩과 웹 크롤링
스크래피를 사용하는 이유 : 스크래피를 사용하면 스크래핑을 간단히 할 수 있다. 스크랩하려는 항목을 정의하는 클래스를 만들고 페이지에서 데이터를 추출하기 위한 몇 가지 규칙을 쓰면 된다. 결과는 JSON, XML, CSV 또는 다른 다양한 형식으로 내보낼 수 있다. 수집된 데이터는 그대로 저장하거나 가져오면서 불필요한 부분을 제거하고 저장할 수 있다.
스크래피는 확장을 통해 웹사이트 로그인, 세션 쿠키 처리와 같은 다른 작업도 처리할 수 있다. 이미지도 스크랩해서 캡처된 콘텐츠와 연결할 수 있다. 최신 버전에는 스크랩한 데이터 저장을 위한 클라우드 서비스 직접 연결, 재사용 가능한 프록시 연결 기능이 추가됐으며, 난해한 HTML 및 HTTP 동작 처리 부분이 개선됐다.
Sh
Sh의 기능 : 하위 프로세스에서 외부 프로그램을 호출하고 결과를 파이썬 프로그램에 반환한다. 이때 해당 프로그램을 네이티브 파이썬 함수처럼 취급하며 동일한 구문을 사용한다.
Sh를 사용하는 이유 : Sh는 모든 POSIX 준수 시스템에서 유용하다. 해당 시스템에서 사용 가능한 모든 명령줄 프로그램을 파이썬 형식으로 사용할 수 있게 해준다. 불필요한 중복 작업에서 벗어날 수 있을 뿐만 아니라(OS에 있는데 굳이 ping을 실행할 이유가 없음) 더 이상 이 기능을 애플리케이션에 매끄럽게 추가하기 위한 작업에 골몰할 필요도 없다. 단, Sh는 전달되는 매개변수에 대한 무결 처리(sanitization)를 제공하지 않으므로 원시 사용자 입력을 그대로 전달하지 말아야 한다.
스플린터(Splinter)
스플린터의 기능 : 브라우저 작업을 자동화해서 웹 애플리케이션을 테스트한다.
스플린터가 필요한 이유 : 웹 애플리케이션 테스트를 자동화하는 작업은 절대 재미있지 않다. 스플린터는 브라우저를 호출하고 URL을 전달하고 양식을 채우고 버튼을 클릭하는 등 저수준의 성가신 작업을 없애고 전체 프로세스를 자동화한다.
크롬 및 파이어폭스를 사용한 작업을 위한 드라이버를 제공하며, 셀레늄 리모트(Selenium Remote)를 사용해서 다른 곳에서 실행되는 브라우저를 제어할 수 있다. 대상 브라우저에서 수동으로 자바스크립트를 실행할 수도 있다
'웹프로그래밍' 카테고리의 다른 글
HTML 리스트와 링크 만드는 법 (0) | 2019.02.10 |
---|---|
html 텍스트 표시 방법 (0) | 2019.02.08 |
HTML 문서의 기본 구조 (0) | 2019.02.06 |
HTML 문서 구조 (0) | 2018.01.20 |
웹 프로그래밍 공부하는 순서 (0) | 2018.01.20 |