
5 библиотеки Python я хотел бы найти раньше
6 августа 2025 г.В прошлом месяце я отлаживал особенно неприятный сценарий обработки данных, который занимал 4 часа. Четыре Часы. После обнаружения одной библиотеки в этом списке я получил ее до 12 минут.
Этот момент заставил меня понять, сколько месяцев я потратил впустую переосмысленные колеса, у которых уже были совершенно хорошие решения, сидящие в PYPI. Итак, вот пять библиотек Python, которые спасли меня бесчисленные поздние ночи, если бы я нашел их раньше.
1. Богатый - потому что печатные операторы не должны сосать
Что он делает:Выключает выходной вывод из уродливого текста в красивые, отформатированные дисплеи.
Долгое время я был тем разработчиком, который все отлаживалprint()
заявления. Мой терминал выглядел как хаотический беспорядок текста, и отслеживание проблем было похоже на поиск иглы в стоге сена.
Затем я обнаружил Рича.
from rich.console import Console
from rich.table import Table
console = Console()
Instead of ugly print statements
console.print("Hello", style="bold red") console.print("Processing data...", style="green")
Beautiful tables instead of messy lists
table = Table(title="User Data") table.add_column("Name", style="cyan") table.add_column("Status", style="magenta") table.add_row("John", "Active") table.add_row("Sarah", "Pending") console.print(table)
Почему это изменение игры:Рич не просто делает вещи красивыми (хотя это делает это очень хорошо). У него есть бары прогресса, синтаксис, выделение и даже отображает отметку в вашем терминале. Мои сессии отладки прошли от прищущения в стенах текста к фактически понять, что происходит с первого взгляда.
«Я бы хотел, чтобы я узнал об этом раньше»:Когда я понял, что могу использоватьrich.inspect()
исследовать любой объект Python с красивым форматированием вместо борьбы сdir()
иvars()
Полем
2. Поляры - убийца панд, которого я не знал
Что он делает:Операции DataFrame, которые быстрее панды и используют намного меньше памяти.
Я был постоянным пользователем Pandas в течение многих лет. До тех пор, пока мне не пришлось обработать 2 ГБ CSV -файл, и мой скрипт продолжал сбиваться с ошибками памяти. Коллега упомянул поляры, и я подумал, что сделаю ему шанс.
import polars as pl
Reading large files? No problem.
df = pl.read_csv("huge_file.csv", lazy=True)
Chaining operations that would make Pandas cry
result = ( df .filter(pl.col("status") == "active") .group_by("category") .agg([ pl.col("revenue").sum().alias("total_revenue"), pl.col("user_id").count().alias("user_count") ]) .sort("total_revenue", descending=True) )
Only executes when you call collect()
final_result = result.collect()
Почему это изменение игры:Поляры ленивы по умолчанию, что означает, что он не выполняет операции, пока вы не скажете это. Это позволяет оптимизировать всю цепочку запросов. Кроме того, это написано в ржавчине, так что это абсурдно быстро.
«Я бы хотел, чтобы я узнал об этом раньше»:Просмотр 4-часовой работы по обработке данных за 12 минут. Я буквально думал, что что -то сломано.
3. Typer - приложения командной строки, которые не заставляют вас ненавидеть себя
Что он делает:Создает красивые приложения CLI с минимальным кодом и автоматической генерацией справки.
Раньше я создавал инструменты командной строки сargparse
, и это было ... больно. Так много кода шаблона, чтобы разобрать несколько аргументов. Затем я обнаружил Тайпера, и внезапно создание инструментов CLI стало весело.
import typer from pathlib import Path
app = typer.Typer()
@app.command() def process_file( input_file: Path = typer.Argument(..., help="Path to input file"), output_dir: Path = typer.Option("./output", help="Output directory"), verbose: bool = typer.Option(False, "--verbose", "-v", help="Verbose output") ): """ Process a file and save results to output directory. """ if verbose: typer.echo(f"Processing {input_file}...")
# Your processing logic here
typer.echo(f"✅ Done! Results saved to {output_dir}")
if name == "main": app()
Почему это изменение игры:Типовые подсказки становятся вашим интерфейсом CLI. Тайпер автоматически генерирует текст справки, проверяет входные данные и даже дает вам красивые сообщения об ошибках. Больше нет борьбы с документацией Argparse.
«Я бы хотел, чтобы я узнал об этом раньше»: Realizing I could build a professional-looking CLI tool in 20 lines of code that would have taken me 100+ lines with argparse.
4. httpx - запросы, но на самом деле современные
Что он делает:Http -клиент, который поддерживает Async/wait и http/2, сохраняя при этом знакомые запросы API.
Я застрял вrequests
Мышление слишком долго. Не поймите меня неправильно, запросы велики, но когда вам нужно делать сотни звонков API, синхронная природа становится узким местом.
import httpx import asyncio
Synchronous usage (just like requests)
response = httpx.get("https://api.example.com/data")
But the real magic is async
async def fetch_user_data(user_ids): async with httpx.AsyncClient() as client: tasks = [ client.get(f"https://api.example.com/users/{user_id}") for user_id in user_ids ] responses = await asyncio.gather(*tasks) return [r.json() for r in responses]
Fetch 100 users concurrently instead of sequentially
user_data = asyncio.run(fetch_user_data(range(1, 101)))
Почему это изменение игры:Тот же знакомый API, что и запросы, но с асинхронной поддержкой, когда вам это нужно. Кроме того, он автоматически обрабатывает HTTP/2, что может значительно ускорить несколько запросов на один и тот же сервер.
«Я бы хотел, чтобы я узнал об этом раньше»:Сокращение сценария скребки API с 45 минут до 3 минут, просто переключившись от запросов на HTTPX с асинхроком.
5. Pydantic - проверка данных, которая на самом деле имеет смысл
Что он делает:Проверка и сериализует данные, используя подсказки типа Python, с невероятными сообщениями об ошибках.
Раньше я писал так много пользовательского кода проверки. Проверка, существуют ли поля, проверка типов, обработка пропущенных данных-они были исчерпывающими и подверженными ошибкам. Pydantic изменила все.
from pydantic import BaseModel, EmailStr, validator from typing import Optional from datetime import datetime
class User(BaseModel): name: str email: EmailStr age: int signup_date: Optional[datetime] = None
@validator('age')
def validate_age(cls, v):
if v < 0 or v > 150:
raise ValueError('Age must be between 0 and 150')
return v
This automatically validates everything
try: user = User( name="John Doe", email="not-an-email", # This will fail age=25 ) except ValidationError as e: print(e.json(indent=2)) # Beautiful error messages
Почему это изменение игры:Ваши модели данных становятся вашим уровнем проверки. Больше нет проверки ручной работы, больше нет загадочных ошибок из уродливых данных. Кроме того, он автоматически генерирует схемы JSON для документации API.
«Я бы хотел, чтобы я узнал об этом раньше»:Удаление более 200 строк индивидуального кода проверки и заменить его на 20-линейную модель пидантики, которая работала лучше.
Настоящий урок здесь
Все эти библиотеки разделяют что -то общее: они решают реальные проблемы, с которыми сталкивается каждый разработчик Python, но способами, которые чувствуют себя почти волшебными, когда вы впервые их используете.
Большой урок? Не бойтесь исследовать за пределами «стандартных» библиотек, о которых все говорят. Некоторые из моих самых больших успехов в производительности были получены из библиотек, которыми я наткнулся на случайные репозиции GitHub или похоронены в чьем -то файле требований .txt.
Также прочитайте код других людей. Я нашел половину этих библиотек, просматривая проекты с открытым исходным кодом и задаваясь вопросом: «Подождите, что делает этот импорт?»
Какие библиотеки изменили ваш рабочий процесс разработки? Я всегда ищу следующую изменение игры, и экосистема Python никогда не останавливает меня.
Есть ли библиотека, которая заслуживает того, чтобы быть в этом списке? Оставьте его в комментариях - я всегда охотиюсь за инструментами, которые делают разработку Python более приятным.
Оригинал