TOP 10 PYTHON PACKAGES
USED IN MY PRODUCTION PROJECTS
A R U N A R U N I S T O
1. pdfkit
What it is
HTML-to-PDF generation using
wkhtmltopdf.
Why I used it
Needed layout-accurate, printable PDFs
driven by HTML/CSS instead of rigid drawing
APIs.
How it was used
Rendered backend-generated HTML into
PDFs for invoices and reports, mostly
executed via background workers.
Key challenges
CSS inconsistencies, high memory usage for
large PDFs, and fragile system
dependencies.
Verdict
Use only when HTML fidelity is mandatory.
Powerful, but operationally brittle.
2. boto3
What it is
AWS SDK for Python.
Why I used it
Direct, fine-grained control over AWS
services—primarily S3.
How it was used
Uploading/downloading objects, generating
presigned URLs, streaming large files.
Key challenges
Verbose error handling, silent IAM
permission failures, and inconsistent APIs.
Verdict
Low-level and unforgiving, but unavoidable
for serious AWS work.
3. sentry
What it is
Error tracking and monitoring platform.
Why I used it
Logs alone didn’t provide visibility into
production-only failures.
How it was used
Captured unhandled exceptions with
contextual metadata and controlled alerting.
Key challenges
Noise, if not tuned, risks alert fatigue and
sensitive data handling.
Verdict
Extremely useful when curated; useless if
left on default settings.
4. psycopg2
What it is
PostgreSQL adapter for executing raw SQL.
Why I used it
Required precise control over queries,
transactions, and performance.
How it was used
Manual SQL execution for critical paths and
batch operations.
Key challenges
More room for mistakes, manual connection
handling, and no safety nets.
Verdict
Excellent when control matters. Punishes
careless design.
5. websockets
What it is
Library for building WebSocket-based real-
time systems.
Why I used it
HTTP polling was inefficient and introduced
unacceptable latency.
How it was used
Maintained persistent client connections for
real-time updates.
Key challenges
Stateful connections, scaling complexity,
and disconnect handling.
Verdict
Solves real-time problems but increases
operational complexity.
6. celery
What it is
Distributed task queue for background job
processing.
Why I used it
Slow or unreliable operations didn’t belong
in request-response flows.
How it was used
Handled PDF generation, emails, and long-
running tasks asynchronously.
Key challenges
Debugging failures, monitoring overhead,
and retry misconfiguration risks.
Verdict
Powerful but easy to misuse. Should be
introduced deliberately.
7. channels
What it is
Django extension for async and WebSocket
support via ASGI.
Why I used it
Needed WebSockets tightly integrated with
Django authentication and models.
How it was used
Managed real-time connections within the
Django ecosystem.
Key challenges
Async debugging pain, sync–async
boundaries, added complexity.
Verdict
Use only when Django integration is non-
negotiable.
8. requests
What it is
High-level HTTP client library.
Why I used it
Reliable communication with multiple third-
party APIs.
How it was used
Wrapped API calls with explicit timeouts and
response validation.
Key challenges
Blocking I/O, unsafe defaults, and poor retry
behavior out of the box.
Verdict
Simple and reliable, but only when wrapped
with strict rules.
9. pandas
What it is
Data manipulation library for structured
datasets.
Why I used it
Business workflows depended heavily on
Excel-based data exchange.
How it was used
Reading, validating, modifying, and
exporting Excel files.
Key challenges
High memory usage, poor concurrency, and
easy to misuse as a database.
Verdict
Excellent for data processing. Never treat it
as persistence.
10. smtplib
What it is
Low-level SMTP client library.
Why I used it
Required direct control over email sending
behavior.
How it was used
Sent transactional emails via SMTP, usually
from background workers.
Key challenges
Blocking calls, weak ergonomics, and
deliverability issues.
Verdict
Works, but primitive. Managed email
services are usually better.