I still remember that late night when I just wanted to “try out” a new Python library. The plan? Simple testing. The reality? I coded until sunrise, continuously adding features to a tool I never intended to build. That’s the magic of Python – it’s not just a programming language, but an addictive rabbit hole that keeps you tinkering endlessly.
Here are 12 Python libraries that got me hooked and kept me building projects nonstop.
1. TQDM: The Progress Bar That Makes You Feel Like a Hacker
Watching progress bars slide across the screen is genuinely satisfying. With tqdm, even the most boring loops become cinematic.
python
from tqdm import tqdm
import time
for i in tqdm(range(100)):
time.sleep(0.05)
I first used tqdm in a file copying script, just for fun. Then I couldn’t stop. Now every long-running script has a cool progress bar. The addiction comes from the instant feedback – trust me, once you try it, you’ll never tolerate progress-bar-less loops again.
2. Arrow: Effortless Date and Time Handling
I used to dread working with Python’s datetime. Timezones, formatting, parsing… it was a mess. Then I discovered arrow.
python
import arrow
dt = arrow.utcnow()
print(dt.shift(hours=5).format('YYYY-MM-DD HH:mm'))
Suddenly, time manipulation became stress-free. I started automating reminders, scheduling backups, and even wrote a script that automatically renames files with timestamps. If you’ve ever struggled with datetime, arrow is a breath of fresh air.
3. Faker: Realistic Fake Data
In my first Django project, I needed test users. Copy-pasting “John Doe” a hundred times wasn’t sustainable. Then I found faker.
python
from faker import Faker
fake = Faker()
for _ in range(3):
print(fake.name(), fake.email())
Next thing I knew, I was populating entire databases with fake addresses, credit cards, and company names. Suddenly, testing went from boring to fun.
4. Fire: Turn Scripts into CLI Tools
I wrote a script to clean up duplicate files on my laptop. Later, I wanted to run it with different parameters without editing code each time. Enter fire.
python
import fire
def greet(name="World"):
return f"Hello {name}!"
if __name__ == '__main__':
fire.Fire(greet)
One line of code, and your script becomes a full-fledged command-line tool. This little discovery led me to build mini-CLIs for all my automation tasks.
5. Playwright Sync: Web Automation Without the Headache
Sure, Selenium is powerful, but it’s frustrating to use. Then I tried Playwright sync – browser automation as smooth as butter.
python
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto("https://example.com")
print(page.title())
I went from frustrated to obsessed. Started with web scraping, then automated form filling, then tested my own applications. Suddenly, the browser wasn’t an obstacle but a playground.
6. PyInputPlus: Smarter User Input
Ever written a CLI script where users enter garbage at prompts? I have. PyInputPlus solves this.
python
import pyinputplus as pyip
age = pyip.inputInt("Enter your age: ", min=1)
print(f"You are {age} years old.")
No need to write validation logic – the library handles it. Sounds small, but it makes CLI tools bulletproof.
7. PDFPlumber: Tame Your PDFs
I needed to extract tables from a 200-page PDF report. Manual copying? Impossible. Regex? A nightmare. Then I discovered PDFplumber.
python
import pdfplumber
with pdfplumber.open("report.pdf") as pdf:
first_page = pdf.pages[0]
text = first_page.extract_text()
print(text)
What started as a one-off project turned into building PDF search tools, auto-summarization scripts, even invoice analyzers.
8. Tenacity: Retry Until Success
APIs fail, networks drop. Without retries, scripts crash. With tenacity, retries become effortless.
python
from tenacity import retry, stop_after_attempt
import random
@retry(stop=stop_after_attempt(3))
def flaky_task():
if random.random() < 0.7:
raise Exception("Failed!")
return "Success!"
print(flaky_task())
This library saved me in a scraping project where the website randomly went offline. No more frustration – just let tenacity handle the retries.
9. IceCream: Debugging Made Cool
Print debugging is underrated. But with icecream, it becomes addictive.
python
from icecream import ic x = 42 ic(x * 2)
It prints both the expression and the value. I went from scattering print() statements everywhere to actually enjoying debugging.
10. Schedule: Automate Your Life
I built my first cron replacement with schedule. Simple, readable, and makes automation scripts easy.
python
import schedule, time
def job():
print("Running task...")
schedule.every(10).seconds.do(job)
while True:
schedule.run_pending()
time.sleep(1)
Started with backups, then reminders, then health checks. Soon enough, my computer felt like a personal assistant running multiple mini daemons.
11. Humanize: Make Numbers Speak Human
Raw numbers are boring. Humanize makes them readable.
python
import humanize print(humanize.intcomma(1234567)) print(humanize.naturaltime(3600))
I first used it in a logging script. Suddenly, logs went from obscure to clear. Instead of seeing “3600 seconds,” you see “an hour ago.”
12. PyWhatKit: Automation Like Magic
Want to send WhatsApp messages with Python? Or play YouTube videos? PyWhatKit does it in one line.
python
import pywhatkit
pywhatkit.playonyt("Python automation tutorials")
One night I wrote a script that sends me random motivational quotes via WhatsApp every morning at 9 AM. Half-joking, half-serious – but it actually worked.
Conclusion
These libraries didn’t just make me more efficient – they made coding come alive. Every library discovery led me to build something I never planned. That’s the charm of Python: its ecosystem pushes you to experiment, automate, and tinker until you create something new.