摘要:多Python版本,隔离无干扰:一键安装Python 2.7到3.14的任意版本,每个版本都独立沙箱化,切换项目时轻松无压力。一站式服务集成:它不只是Python管理器,还内置了Nginx、MariaDB、MySQL、Redis等常用服务。打开一个控制面板,就
一个项目最终是整洁稳定的优质成果,还是杂乱无章的“意大利面式代码堆”,不仅取决于代码质量,更与开发流程和工具的选择息息相关。
一款好的工具,能自动化处理重复繁琐的工作,梳理复杂的流程,让项目始终保持整洁健康的状态。
今天要介绍的并非Requests、Pandas这类广为人知的库,而是几款相对小众却功能强大的工具——它们切实改善了我的开发流程与体验。
ServBay
还在为管理多个Python环境而头疼吗?
这个项目需要Python 3.8,那个项目得用3.11,而某个遗留项目至今还在依赖2.7。
你或许会尝试结合pyenv、virtualenv和conda来解决,但实际操作中总会一团糟。
直到我发现了ServBay,这些问题瞬间迎刃而解。它精准解决了多个痛点:
多Python版本,隔离无干扰:一键安装Python 2.7到3.14的任意版本,每个版本都独立沙箱化,切换项目时轻松无压力。一站式服务集成:它不只是Python管理器,还内置了Nginx、MariaDB、MySQL、Redis等常用服务。打开一个控制面板,就能启动所有需要的服务。本地AI模型轻松运行:想在本地测试通义千问3(Qwen 3)这类开源模型?在ServBay中安装运行即可,无需面对混乱的环境配置。简而言之:ServBay将我整个本地开发环境——包括Python版本、数据库甚至AI模型——都整合到了一处,实现了统一管理。
Doit
每个项目都少不了格式化代码、运行测试、打包构建这类重复性任务。
我曾经需要在Shell脚本和Makefile之间来回切换,直到遇到Doit。
它允许你用纯Python代码定义和运行自动化任务。
示例配置(文件 dodo.py):
def task_format:"""代码格式化任务:使用ruff工具自动修复代码格式问题"""# 返回任务配置,指定要执行的命令return { 'actions': ['ruff check . --fix'] }def task_test:"""测试任务:在代码格式化后执行测试,确保功能正常"""# task_dep指定依赖任务,确保format执行完成后才运行testreturn { 'actions': ['pytest -q'], 'task_dep': ['format'] }之后只需在终端运行doit命令,它会自动处理任务依赖关系,执行所需操作。
简而言之:它用更整洁、更贴合Python风格的方式,替代了我之前零散分布的脚本。
Playwright
多年来,我一直用Selenium做Web自动化和数据爬取。
但切换到Playwright后,开发体验仿佛从“骑自行车”升级到了“开跑车”。
示例代码:
from playwright.sync_api import sync_playwright# 启动Playwright,自动管理浏览器生命周期with sync_playwright as p:# 启动Chrome浏览器(chromium),默认无头模式,可加headless=False显示浏览器界面browser = p.chromium.launch# 新建一个浏览器页面page = browser.new_page# 跳转到谷歌首页page.goto("https://www.google.com")# 截取当前页面,保存为图片page.screenshot(path="google.png")# 关闭浏览器browser.close简而言之:Playwright速度更快、稳定性更高,还支持异步操作,如今已成为我Web自动化的首选工具。
pyinfra
很多人用Ansible做服务器自动化,但用YAML编写复杂逻辑时往往很吃力。
pyinfra解决了这个问题——它允许你用纯Python代码描述基础设施配置。
示例代码:
from pyinfra import host # 引入主机对象,用于操作目标服务器from pyinfra.operations import server, files # 引入服务器操作和文件操作模块# 1. 创建应用专用用户,指定用户名为app,家目录为/home/appserver.user(name="创建app应用用户", # 任务描述,便于日志查看user="app",home="/home/app")# 2. 将本地dist/app/目录的文件同步到服务器的/opt/app/目录files.sync(name="同步应用代码文件",src="dist/app/", # 本地源目录dest="/opt/app/" # 服务器目标目录)简而言之:如果你更习惯用代码而非配置文件来实现功能,pyinfra绝对能让你如愿以偿。
Rio
有时候,你可能希望自己的CLI工具不只是单调的文字交互,而是有更友好的界面。
Rio就像“终端版React”——采用声明式语法、组件化设计,开发体验十分流畅。
示例代码:
import rio # 导入rio终端UI框架# 定义自定义组件,继承自rio.Componentclass MyAppComponent(rio.Component):# 重写build方法,定义组件的UI结构def build(self) -> rio.Component:# 返回一个垂直排列的列组件,包含文本和按钮return rio.Column(# 标题文本,使用heading1样式(内置样式,字体更大更粗)rio.Text("Hello, World!", style="heading1"),# 按钮组件,点击时触发lambda函数(打印日志)rio.Button("Click Me!", on_press=lambda: print("Clicked!")),)# 创建应用实例,指定根组件为MyAppComponentapp = rio.App(build=MyAppComponent)# 启动应用app.run简而言之:这是一个React风格的终端应用框架,能帮你快速构建美观的终端界面,我非常欣赏它的设计理念。
FreeSimpleGUI
有时候,非技术背景的用户无法熟练操作命令行。
但为了一个小工具专门开发Qt或Tkinter应用,又显得小题大做。
FreeSimpleGUI恰好填补了这个空白。
示例代码:
import FreeSimpleGUI as sg # 导入FreeSimpleGUI库,简写为sg(社区常用习惯)# 1. 定义GUI布局:列表中的每个子列表对应界面的一行layout = [[sg.Text("Enter your name")], # 第一行:文本提示[sg.InputText(key='-INPUT-')], # 第二行:输入框,key用于后续获取输入值[sg.Button('OK'), sg.Button('Cancel')] # 第三行:两个按钮]# 2. 创建窗口:指定窗口标题和布局window = sg.Window('Simple Window', layout)# 3. 事件循环:监听用户操作while True:# 读取窗口事件和输入值,阻塞直到有事件触发event, values = window.read# 若用户关闭窗口(WIN_CLOSED)或点击Cancel按钮,退出循环if event in (sg.WIN_CLOSED, 'Cancel'):break# 若点击OK按钮,打印问候语(从values中通过key获取输入值)print(f'Hello, {values["-INPUT-"]}!')# 4. 关闭窗口,释放资源window.close简而言之:用最少的代码实现用户友好的界面,非常适合快速开发轻量工具。
当你的Python应用突然CPU占用率飙升到100%,或者运行速度变得极慢时,
py-spy就是你需要的“救星”。
它能附着到正在运行的进程上,无需修改代码,也不用重启应用,就能进行性能分析。
常用命令:
# 实时查看进程的CPU占用情况(类似top命令),12345为目标进程IDpy-spy top --pid 12345# 记录进程的性能数据,生成SVG格式的可视化报告(便于后续分析)py-spy record -o profile.svg --pid 12345简而言之:这是我排查生产环境性能问题的首选工具——操作简单、功能强大,且对运行中的应用无干扰。
GtiHub主页:https://github.com/samuelcolvin/watchfiles是否希望代码修改后,应用能自动重载?
watchfiles由Rust编写,实现了极致的监听速度。
示例代码:
from watchfiles import watch # 导入watch函数,用于监听文件变化from subprocess import run # 导入subprocess.run,用于执行系统命令# 监听./src目录下的文件变化,仅关注.py后缀的Python文件# watch函数返回生成器,每次文件变化时会产生变化记录for changes in watch('./src',watch_filter=lambda change_type, file_path: file_path.endswith('.py')):# 打印变化的文件信息(change_type表示变化类型,如新增、修改、删除)print("File changed:", changes)# 自动运行pytest测试,确保修改后的代码无功能问题run(["pytest", "-q"])简而言之:我用它自动重新运行测试或重载服务,极大提升了开发效率。
BeautifulSoup
它虽问世已久,却依旧“宝刀未老”。
在Web爬取和HTML解析场景中,BeautifulSoup仍是最易用的工具之一。
示例代码:
from bs4 import BeautifulSoup # 导入BeautifulSoup解析类# 待解析的HTML文档(此处示例为简化版,实际可从网页响应中获取)html_doc = """A StoryThe Dormouse's story
"""# 创建BeautifulSoup对象,指定解析器为html.parser(Python内置,无需额外安装)soup = BeautifulSoup(html_doc, 'html.parser')# 提取title标签的文本内容并打印print(soup.title.string) # 输出结果:A Story简而言之:从杂乱的HTML中提取数据时,它仍是我的首选工具。
希望这些工具中,有几款能融入你的日常开发流程。
优秀的工具未必复杂,关键在于能否优雅地解决你的实际问题。
如果你仍在为本地环境、数据库和AI模型的管理而烦恼,
不妨试试ServBay——它或许会成为你开发路上的新伙伴。
来源:我喜欢思考
