ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

从脚本到项目,Python工程化实战指南

从脚本到项目,Python工程化实战指南 脚本是草稿项目是建筑随手写的脚本像草稿纸变量叫a、b、temp逻辑从第一行铺到第两百行函数不存在的。项目则不同它要被人读、被人改、被人扩展。古人说“不积跬步无以至千里”工程化就是那些不起眼的跬步清晰的目录、一致的命名、合理的分层。把脚本当项目写是把一次性消耗品变成可复用资产。你不需要一开始就上微服务但至少要让下一个打开代码的人三分钟内知道从哪读起。目录结构决定可维护性一个像样的Python项目根目录下应该有README.md、requirements.txt、setup.py或pyproject.toml。源码放进src/或包名目录测试放进tests/文档放进docs/脚本工具放进scripts/。别把所有.py文件堆在桌面。目录结构是项目的骨架骨架歪了肌肉再壮也站不直。推荐src布局避免测试时导入路径混乱。__init__.py该加就加包边界清楚导入才不会变成寻宝游戏。依赖与虚拟环境别让环境毁了你“在我电脑上能跑”是程序员最苍白的辩解。Python依赖冲突是家常便饭A项目要Django 2.2B项目要Django 4.0全局安装必然打架。venv或conda创建隔离环境pip freeze requirements.txt锁定版本。虚拟环境是项目的无菌室别让全局包污染你的实验。更进一步用pip-tools或poetry管理依赖树区分开发依赖与生产依赖。环境可复现协作才有意义。配置与日志别用print打天下脚本里写死数据库密码、API密钥上传GitHub那一刻就泄露了。配置抽到.env或config.yaml用python-dotenv读取敏感信息走环境变量。日志更不能用printlogging模块分级别、分文件、分格式。print是临时通知logging是飞行记录仪。出问题时日志能告诉你谁在何时何地干了什么print只能让你对着屏幕发呆。配置与日志是项目从玩具走向工具的第一道门。测试与CI给代码上保险没有测试的代码改一行都心惊胆战。pytest写单元测试覆盖核心逻辑tox或nox跑多版本GitHub Actions或GitLab CI做持续集成每次提交自动跑测试。测试不是证明你对而是发现你错。覆盖率不必强求百分之百但关键路径必须覆盖。CI像门卫不合格的提交别想混进主分支。起初麻烦久了安心。自动化测试是唯一能让你半夜睡踏实的保险。文档与版本给未来留路README写清楚项目干什么、怎么装、怎么跑、怎么测。函数写docstring模块写说明复杂逻辑写注释——注释解释为什么代码解释是什么。Git提交信息别写“fix bug”写“修复用户登录时token过期未刷新”。版本号遵循语义化主版本不兼容次版本加功能修订版本修bug。文档是写给未来的自己版本是写给协作者的契约。你今天省下的说明明天会变成三小时的排查。工程化不是一蹴而就而是循序渐进。先从虚拟环境和README开始再加日志和测试然后上CI和类型注解。每一步都让项目更结实。从脚本到项目是从个人英雄到团队协作的蜕变。代码终会老去但良好的工程习惯能让它在岁月里保持体面。千里之行始于足下项目之稳始于工程。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进