알아두면 유용한 12가지 파이썬 라이브러리

Python은 그 단순함, 가독성, 그리고 방대한 라이브러리 생태계 덕분에 매우 유용한 언어입니다. 많은 개발자들이 NumPy, pandas, requests, Flask와 같은 유명한 라이브러리에 익숙하지만, 그 외에도 생산성을 높이고 특정 문제를 더 효율적으로 해결할 수 있는 덜 알려진 라이브러리들이 많이 존재합니다.

이러한 라이브러리들은 잘 알려진 라이브러리들에 비해 덜 주목받지만, 작업을 단순화하고, 워크플로를 최적화하며, 프로젝트에 혁신을 가져올 수 있는 독특한 기능들을 제공합니다.

Python에는 매우 유용하지만 널리 알려지지 않은 라이브러리들이 많이 있습니다. 이러한 라이브러리는 반복 작업을 자동화하고, 데이터를 더 효율적으로 처리하며, 적은 코드로 강력한 애플리케이션을 구축하는 데 도움을 줄 수 있습니다.

이번 글에서는 파일 처리, 데이터 처리, 웹 개발 등 다양한 분야에 걸친 라이브러리들을 소개하며, 개발 과정을 더 원활하고 효율적으로 만드는 방법을 알아보겠습니다.

1. WeasyPrint - HTML과 CSS를 PDF로 변환

WeasyPrint는 HTML과 CSS를 PDF로 변환할 수 있는 간단하고 우아한 라이브러리입니다. 다른 PDF 라이브러리와 달리 복잡한 레이아웃을 지원하며, 웹 기술을 사용합니다.

1
2
3
4
5
6
from weasyprint import HTML

html_content = """<h1>Hello, World!</h1><p>This is a PDF generated
from HTML and CSS.</p>"""

HTML(string=html_content).write_pdf("output.pdf")

이 라이브러리는 청구서나 보고서와 같은 PDF 파일을 동적으로 생성해야 하는 웹 애플리케이션에서 사용할 수 있습니다.

2. Pyexcel - 간단한 엑셀 데이터 처리

Pyexcel은 다양한 형식(.xls, .xlsx, .ods)의 엑셀 파일을 읽고, 쓰고, 조작할 수 있는 경량 라이브러리입니다.

1
2
3
4
5
import pyexcel as p

data = p.get_array(file_name="example.xlsx")

print(data)

이 라이브러리는 프로젝트에서 여러 엑셀 형식을 처리해야 할 때 유용합니다.

3. Pendulum - 간단한 날짜/시간 처리

Pendulum은 Python의 datetime 라이브러리를 대체할 수 있는 라이브러리로, 직관적이고 간단한 API를 제공하며, 시간대 지원, 파싱, 포맷팅, 날짜 연산 등을 포함합니다.

1
2
3
4
5
6
import pendulum

now = pendulum.now('UTC')

print(now.to_datetime_string())
# 출력: 2024-10-22 6:32:10

이 라이브러리는 표준 datetime 라이브러리로 처리하기 번거로운 많은 복잡한 날짜 계산을 단순화합니다. 서머타임 변환과 같은 까다로운 부분도 자동으로 처리할 수 있습니다.

4. Tenacity - Python용 재시도 라이브러리

Tenacity는 네트워크 요청이나 데이터베이스 연결과 같이 신뢰할 수 없는 함수에 대한 재시도 로직을 간단하게 처리할 수 있는 범용 재시도 라이브러리입니다.

1
2
3
4
5
6
7
8
from tenacity import retry, stop_after_attempt

@retry(stop=stop_after_attempt(3))
def unreliable_function():
print("Attempting to execute...")
raise Exception("Failed")

unreliable_function()

이 라이브러리는 간헐적인 네트워크 오류를 유연하게 처리하는 데 유용합니다. 수동으로 재시도 로직을 작성하지 않고, 함수에 데코레이터를 적용하여 코드 복잡성을 줄이고 신뢰성을 높일 수 있습니다.

5. Dataset - 간단한 데이터베이스 상호작용

Dataset은 SQL 데이터베이스와 Python 구문을 사용해 상호작용할 수 있는 데이터베이스 추상화 계층입니다. SQL을 작성하지 않고도 데이터베이스 기반 애플리케이션을 빠르게 프로토타입할 수 있습니다.

1
2
3
4
5
import dataset

db = dataset.connect('sqlite:///mydatabase.db')

db['users'].insert(dict(name='hgko', age=30))

이 라이브러리는 복잡한 ORM 설정을 걱정하지 않고 데이터베이스 상호작용을 처리할 수 있어, 애플리케이션 로직에 집중할 수 있게 해줍니다.

6. Poetry - 의존성 관리 및 패키징

Poetry는 Python 프로젝트 관리의 의존성 관리 및 패키징 도구입니다. 단순한 설정 파일로 의존성 관리, 빌드, PyPI에 배포까지 처리할 수 있습니다.

1
2
3
poetry new my_project
poetry add pendulum
poetry add requests

이 라이브러리는 가상 환경 설정, 의존성 관리, 프로젝트 패키징 과정을 간소화하며, pip, pipenv, setup.py와 같은 도구를 하나의 통합된 솔루션으로 대체할 수 있습니다.

7. Dask - 병렬 컴퓨팅 및 태스크 스케줄링

Dask는 유연한 병렬 컴퓨팅 라이브러리로, 기존 Python 코드에 쉽게 통합할 수 있습니다.

1
2
3
4
5
6
7
8
9
import dask.dataframe as dd

# 큰 데이터셋 읽기
df = dd.read_csv('large_dataset.csv')

# 병렬로 그룹화 연산 수행
result = df.groupby('category').sum().compute()

print(result)

이 라이브러리는 메모리에 적재하기 어려운 대규모 데이터셋을 처리할 때 유용합니다. Dask는 태스크를 더 작은 청크로 나누어 병렬로 처리함으로써 처리 시간을 크게 줄일 수 있습니다.

8. Faker - 테스트를 위한 가짜 데이터 생성

Faker는 이름, 주소, 이메일, 전화번호 등과 같은 가짜 데이터를 생성할 수 있는 라이브러리입니다. 테스트, 데이터 생성, 데이터베이스 시드(seed) 작업에 유용합니다.

1
2
3
4
5
6
from faker import Faker

fake = Faker()

print(fake.name()) # 랜덤한 이름 출력
print(fake.address()) # 랜덤한 주소 출력

이 라이브러리는 애플리케이션 성능을 테스트할 대규모 데이터셋이 필요할 때 유용합니다.

9. FlashText - 빠른 키워드 검색 및 치환

FlashText는 키워드 기반의 빠른 검색 및 치환을 위한 라이브러리입니다. 정규 표현식보다 키워드 검색 작업에 훨씬 효율적입니다.

1
2
3
4
5
6
7
8
9
from flashtext import KeywordProcessor

keyword_processor = KeywordProcessor()
keyword_processor.add_keyword('JavaScript', 'JS')

text = "JavaScript is a popular programming language."

print(keyword_processor.replace_keywords(text))
# 출력: JS is a popular programming language.

이 라이브러리는 수백만 개의 레코드에서 여러 키워드를 치환해야 하는 경우에 특히 유용합니다.

10. PyPDF2 - PDF 파일 조작

PyPDF2는 PDF 파일을 합치거나, 분할하거나, 회전하거나, 텍스트를 추출할 수 있는 라이브러리입니다. 자동화된 워크플로에서 PDF 문서를 처리할 때 적합합니다.

1
2
3
4
5
6
7
8
9
10
11
from PyPDF2 import PdfReader, PdfWriter

reader = PdfReader('input.pdf')

writer = PdfWriter()

for page in reader.pages:
writer.add_page(page)

with open('output.pdf', 'wb') as f:
writer.write(f)

이 라이브러리는 여러 PDF 문서를 하나의 파일로 합치는 작업을 자동화하는 데 유용합니다.

11. Humanize - 데이터의 인간 친화적 변환

Humanize는 숫자를 단어로 바꾸거나 날짜를 자연어로 표현하는 등 데이터를 더 읽기 쉽게 변환하는 도구를 제공합니다.

1
2
3
4
5
6
7
import humanize

print(humanize.naturalsize(1024))
# 출력: '1.0 kB'

print(humanize.intword(1234567890))
# 출력: '1.2 billion'

이 라이브러리는 비기술적인 이해관계자에게 더 이해하기 쉬운 형식으로 데이터를 제시해야 하는 보고 도구에 특히 유용합니다.

12. Memory-Profiler - Python 코드의 메모리 사용량 모니터링

Memory-Profiler는 Python 프로그램의 메모리 사용량을 줄 단위로 모니터링할 수 있는 모듈입니다. 메모리 누수 식별이나 메모리 사용량 최적화에 유용합니다.

1
2
3
4
5
6
7
8
9
10
from memory_profiler import profile

@profile
def my_func():
a = [1] * (10 ** 6)
b = [2] * (2 * 10 ** 7)
del b
return a

my_func()

이 라이브러리는 비효율적인 데이터 구조로 인해 메모리 사용량이 과도한 Python 스크립트를 최적화하는 데 사용할 수 있습니다. 병목 지점을 식별하고 애플리케이션의 메모리 사용량을 줄이는 데 도움이 됩니다.

결론

Python의 방대한 생태계에는 잘 알려지지 않았지만 개발 경험을 크게 향상시킬 수 있는 라이브러리들이 많이 있습니다. 이러한 도구들을 적극적으로 사용해 보세요. 이러한 라이브러리들은 당신이 예상하지 못한 문제에 대한 해결책이 될 수 있습니다.

Share