大家好,我是何三,80后老猿,独立开发者

前几天整理电脑时,我盯着Github收藏夹里那100多个"starred"项目发了好一会儿呆。这些项目大多是我在不同时期随手收藏的,想着"以后可能用得上",结果99%的项目自收藏之日起就再没打开过。

我叹了口气,按下了全选-删除。清理完后,电脑仿佛都轻了几斤。但留下来的7个Python库,却是我每天工作离不开的真·生产力工具。它们可能不够知名,但用过之后,你会怀疑没有它们之前的日子是怎么熬过来的。

1. loguru:让日志记录变得优雅

还记得第一次用Python自带的logging模块时,我花了半小时配置格式和处理器,最后还是在控制台看到一堆难以理解的输出。直到遇见loguru,我才知道日志可以如此简单美好。

from loguru import logger

logger.debug("这是一条调试信息")
logger.info("程序正常运行")
logger.warning("这里可能有问题")
logger.error("出错了!")
logger.critical("严重错误!")

不用配置,开箱即用。自动着色、自动记录时间、支持文件输出,甚至异常捕获都能一行搞定:

@logger.catch
def risky_function():
    # 可能出错的代码

2. typer:告别argparse的繁琐

曾经为了写一个命令行工具,我不得不研究argparse的各种参数。直到发现typer,它基于Python的类型提示,让CLI开发变得直观:

import typer

app = typer.Typer()

@app.command()
def greet(name: str, formal: bool = False):
    """向某人打招呼"""
    if formal:
        typer.echo(f"您好,尊敬的{name}!")
    else:
        typer.echo(f"嘿,{name}!")

if __name__ == "__main__":
    app()

就这样,你不仅得到了一个带--help的命令行程序,连参数类型检查和文档都自动生成了。更妙的是,它底层用的是Click,所以性能也很优秀。

3. rich:让终端输出不再单调

如果你厌倦了黑白两色的终端输出,rich会为你打开新世界的大门。表格、进度条、语法高亮、markdown渲染...它能让你的命令行工具看起来像精心设计的GUI应用。

from rich.console import Console
from rich.table import Table

console = Console()

table = Table(title="明星员工")

table.add_column("姓名", style="cyan")
table.add_column("部门", style="magenta")
table.add_column("贡献值", style="green")

table.add_row("张三", "研发部", "256")
table.add_row("李四", "市场部", "189")
table.add_row("王五", "人事部", "143")

console.print(table)

4. pendulum:处理时间的正确方式

Python的datetime模块用起来总是让人抓狂。pendulum提供了更人性化的接口:

import pendulum

# 创建时间
now = pendulum.now("Asia/Shanghai")
print(now.to_day_datetime_string())  # 输出: Mon, Apr 3, 2023 2:30 PM

# 时间运算
future = now.add(years=1)
print(future.diff_for_humans())  # 输出: in 1 year

# 时区转换
ny_time = now.in_timezone("America/New_York")

5. fastapi:现代Web开发的首选

如果你还在用Flask或Django开发API,不妨试试fastapi。它基于Python类型提示,自动生成OpenAPI文档,性能接近NodeJS和Go:

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    name: str
    price: float

@app.post("/items/")
async def create_item(item: Item):
    return {"item_name": item.name, "price_with_tax": item.price * 1.1}

6. polars:pandas的极速替代品

处理大数据集时,pandas常常力不从心。polars用Rust编写,速度比pandas快得多,而且内存效率更高:

import polars as pl

df = pl.DataFrame({
    "A": [1, 2, 3, 4, 5],
    "B": ["a", "b", "c", "d", "e"]
})

# 类似pandas的操作
result = df.filter(pl.col("A") > 2).select(["B"])

7. hydra:配置管理的终极方案

当项目配置变得复杂时,yaml或json文件往往难以维护。hydra允许你动态组合配置,支持命令行覆盖,让配置管理变得轻松:

from omegaconf import DictConfig
import hydra

@hydra.main(config_path="conf", config_name="config")
def my_app(cfg: DictConfig):
    print(cfg.db.driver)
    print(cfg.db.user)

if __name__ == "__main__":
    my_app()

删掉那些华而不实的收藏后,我的开发效率反而提高了。因为这些库每一个都解决了实际痛点,而不是"看起来很酷"。它们就像工具箱里的那几件趁手工具,用得久了,连握柄都磨出了适合手型的弧度。

如果你也厌倦了收藏一堆用不上的项目,不妨试试这7个经过实战检验的库。我已经打包好了它们的安装包和示例代码,关注公众号【何三笔记】,回复"生产力"即可获取。