工具用得好,Python写得妙,9个效率工具你值得拥有

一个项目会不会变得坚固的屎山,很多时候不光是代码质量问题,还跟工作流程和使用的工具有关。一个顺手的工具能自动化一些乱七八糟的事情,让复杂的流程变得清晰,能让我的项目干净又卫生。

今天我不打算聊那些人尽皆知的库,比如Requests或者Pandas。我想分享一些真正帮我理顺工作流、提升开发体验的工具,它们是我在解决实际问题时发现并一直用到现在的。

ServBay:管理本地开发环境的不二之选

有没有铁子为管理Python环境头疼的?这个项目用Python 3.8,那个项目要用3.11,居然还有老项目用Python 2.7的。用pyenvvirtualenvconda这些工具组合起来,问题是解决了,但是零散又麻烦。

直到我开始用ServBay,这些问题就迎刃而解了。它可以解决很多问题

  • 多版本共存与隔离:我可以在ServBay里一键安装从2.7到3.14等多个Python版本。每个版本都干干净净地独立存在。我可以给不同项目指定不同的Python版本,它们之间互不影响。而且我从2.7装到3.14,总共也就花了5分钟不到。
  • 一站式服务:它不只是个Python管理器。我经常需要用到数据库和缓存,ServBay集成了Nginx、MariaDB、MySQL、Redis这些常用服务。我需要什么,就启动什么,都在一个面板里统一管理,非常省心。

  • 本地AI环境一键搞定:我想在本地跑个开源大模型(比如Qwen 3)做些实验时,不需要自己去折腾复杂的环境配置,在ServBay里点一下就能安装和运行,非常方便。

一句话点评:它帮我统一管理了本地开发所需的一切,从Python版本到数据库再到AI模型,我不用再东拼西凑地维护一套环境了。

Doit:告别乱七八糟的Makefile

每个项目里我都会有一些需要自动化的任务,比如格式化代码、跑测试、打包发布。以前我可能会写一堆.sh脚本,或者用Makefile,但这些写起来总觉得不那么顺手。doit让我能用纯Python来定义和执行这些任务。

示例代码:

python 复制代码
# dodo.py,这是doit的配置文件
def task_format():
    """格式化代码"""
    return {
        'actions': ['ruff check . --fix'],
    }

def task_test():
    """运行测试,这会在格式化之后运行"""
    return {
        'actions': ['pytest -q'],
        'task_dep': ['format'], # 声明任务依赖
    }

在命令行里运行 doit 就行,它会自动处理任务依赖,只运行需要跑的部分。

一句话点评:我用它来替代零散的Shell脚本,让项目任务管理变得更清晰、更Pythonic。

Playwright:新一代的浏览器自动化工具

在做Web自动化和爬虫时,我用了很多年的Selenium。但自从换到Playwright,我的体验好了很多。它是微软出的,感觉更现代,API也更友好。它天生就考虑了异步等待,帮我有效减少了因页面加载慢而导致的各种奇怪错误。

示例代码:

python 复制代码
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.new_page()
    page.goto("https://www.baidu.com")
    page.screenshot(path="baidu.png")
    browser.close()

一句话点评:做Web自动化或者爬虫,我现在首选它,比Selenium省心。

pyinfra:用Python代码来描述服务器

当需要部署应用到服务器上时,很多人会用Ansible。我也用过,但写一堆YAML文件来表达复杂的逻辑时,会感觉很别扭。pyinfra 让我能用纯Python代码来完成服务器的配置和部署,这更符合我的编程习惯。

示例代码:

python 复制代码
from pyinfra import host
from pyinfra.operations import server, files

# 确保服务器上有一个叫'app'的用户
server.user(
    name="Create app user",
    user="app",
    home="/home/app",
)

# 把本地的app目录同步到服务器的/opt/app下
files.sync(
    name="Sync app files",
    src="dist/app/",
    dest="/opt/app/",
)

一句话点评:我个人更喜欢用代码而不是配置文件来搞定部署,如果你也一样,pyinfra很适合。

Rio:用写前端的方式来构建终端UI

有时候我想给自己的命令行工具做炫酷的交互界面,而不是停留在简单的问答。Rio这个TUI框架就很有意思,它的设计思路和Web前端的React很像,用声明式的组件来构建界面,写起来感觉很清爽。

示例代码:

python 复制代码
import rio

class MyAppComponent(rio.Component):
    def build(self) -> rio.Component:
        return rio.Column(
            rio.Text("Hello, World!", style="heading1"),
            rio.Button("Click Me!", on_press=lambda: print("Button clicked")),
        )

app = rio.App(build=MyAppComponent)
app.run()

一句话点评:当我想给命令行应用做一个漂亮的交互界面时,会用Rio来试试,它的组件化思想我很喜欢。

FreeSimpleGUI: 快速给脚本加个简单的图形界面

如果想要给非技术的用户写一些小工具,纯命令行他们用起来不方便。但为此去学庞大的Qt或Tkinter又觉得小题大做。FreeSimpleGUI 完美解决了这个需求,用很少的代码就能搭出一个简单的窗口。

示例代码:

python 复制代码
import FreeSimpleGUI as sg

layout = [
    [sg.Text("请输入你的名字")],
    [sg.InputText(key='-INPUT-')],
    [sg.Button('确定'), sg.Button('取消')]
]
window = sg.Window('一个简单的窗口', layout)

while True:
    event, values = window.read()
    if event in (sg.WIN_CLOSED, '取消'):
        break
    print(f'你好, {values["-INPUT-"]}!')

window.close()

一句话点评:需要快速给脚本加个图形界面时,我就会用它,几分钟就能搞定一个能用的窗口。

py-spy:无侵入的Python程序性能分析器

线上Python程序突然CPU占用很高,或者感觉很慢,这种事我遇到过好几次。py-spy是我排查这类问题的利器。它可以附加到一个正在运行的Python进程上进行性能采样,不需要修改任何代码,甚至不用重启进程。它生成的火焰图能让我一眼就看出性能瓶颈在哪。

命令行用法:

python 复制代码
# 实时查看哪个函数最耗CPU
py-spy top --pid 12345

# 生成火焰图,方便事后分析
py-spy record -o profile.svg --pid 12345

一句话点评:排查线上性能问题时,我首选py-spy,因为它无侵入、够直接。

Watchfiles:极速的文件监控与自动重载

在开发Web应用时,如果需要修改代码后服务能自动重启的功能。Watchfiles 是实现这个功能的核心。它是一个用Rust写的库,监控文件变动的速度飞快,能耗也低。我用它来触发自动跑测试、重新加载服务等操作。

监控并跑测试的脚本:

python 复制代码
from watchfiles import watch
from subprocess import run

# 监控src目录下所有.py文件的变化
for changes in watch('./src', watch_filter=lambda change, filename: filename.endswith('.py')):
    print("文件变动:", changes)
    run(["pytest", "-q"])

一句话点评:本地开发时,我用它来监听文件变动并自动执行命令,开发幸福感大大提升。

BeautifulSoup:HTML解析的老牌强者

这个库可能很多人都用过,但我还是想再提一次。做网络爬虫时,从杂乱的HTML代码里提取数据是很头疼的。BeautifulSoup把这个过程变得非常简单,它的API设计得很人性化,能很好地处理那些不规范的HTML,为我省了很多事。

示例代码:

python 复制代码
from bs4 import BeautifulSoup

html_doc = """
<html><head><title>一个故事</title></head>
<body><p class="title"><b>The Dormouse's story</b></p></body></html>
"""
soup = BeautifulSoup(html_doc, 'html.parser')
print(soup.title.string) # 输出: 一个故事

一句话点评:处理HTML解析和数据提取,它依然是我的首选,尤其是面对不规范的网页时。

希望我分享的这些工具,也能在某些时候帮上忙。好的工具不一定是最复杂的,而是最能解决当下问题的。

相关推荐
广龙宇3 小时前
【一起学Rust · 项目实战】使用getargs库来获取命令行参数
开发语言·python
mit6.8244 小时前
[Agent开发平台] 后端的后端 | MySQL | Redis | RQ | idgen | ObjectStorage
人工智能·python
im_AMBER4 小时前
Web 开发 30
前端·笔记·后端·学习·web
学编程的小虎4 小时前
用 Python + Vue3 打造超炫酷音乐播放器:网易云歌单爬取 + Three.js 波形可视化
开发语言·javascript·python
yunson_Liu4 小时前
编写Python脚本在域名过期10天内将域名信息发送到钉钉
开发语言·python·钉钉
码事漫谈4 小时前
LLVM IR深度技术解析:架构、优化与应用
后端
码事漫谈4 小时前
C++ 中的类型转换:深入理解 static_cast 与 C风格转换的本质区别
后端
小蒜学长5 小时前
springboot餐厅信息管理系统设计(代码+数据库+LW)
java·数据库·spring boot·后端
Chh432245 小时前
React 新版
后端