大家好,我是何三,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个经过实战检验的库。我已经打包好了它们的安装包和示例代码,关注公众号【何三笔记】,回复"生产力"即可获取。