Python 项目结构最佳实践:配置、请求、业务分开写,后期真的省事

发布时间:2026/11/11 14:31:21

Python 项目结构最佳实践:配置、请求、业务分开写,后期真的省事 适合个人开发者、AI 工具作者、脚本自动化玩家。如果你现在的项目还把 API Key、请求逻辑、业务逻辑全写在一个文件里这篇文章可以直接改掉你的写法。为什么项目一开始就要拆结构很多人做项目的时候第一版通常都很简单一个main.py里面直接写请求Key 也写死在里面业务逻辑和接口调用混在一起这种写法能跑但很快就会出现问题代码越来越乱修改一个地方要翻很多行换模型、换接口、换配置都很麻烦出错后不好排查所以如果你做的是 AI 工具、自动化脚本、API 接入项目最好从一开始就把结构拆开。这篇文章直接给你一个适合个人开发者的最小结构方案。一、先说结论推荐的项目结构你可以把项目拆成这几块project/ ├── .env ├── config.py ├── llm_client.py ├── main.py ├── requirements.txt └── logs/每个文件干什么.env放密钥、地址、模型名config.py统一读取配置llm_client.py封装 API 调用main.py写业务逻辑logs/放日志这种结构不复杂但后期很好维护。二、为什么不建议把所有代码写在一个文件里1. 维护麻烦你一旦把 API 调用、错误处理、业务逻辑、配置读取全写在一起后面改起来会很痛苦。2. 不方便复用如果你以后还想做第二个项目很多代码没法直接拿过来。3. 不利于排错出问题时你根本不容易判断是配置错了还是请求错了还是业务逻辑错了。4. 不适合扩展你后面一旦加重试、缓存、日志、限流这种单文件结构会越来越乱。三、.env里放什么最合适建议把这些放进去API_KEY*** BASE_URLhttps://your-api-domain.com/v1 MODELyour-model-name TIMEOUT20 MAX_RETRIES3这样做的好处不把敏感信息写死在代码里本地和线上可以切换配置修改参数时不用动业务代码四、config.py怎么写config.py的作用就是统一读取配置并做校验。importosfromdotenvimportload_dotenv load_dotenv()defget_config():api_keyos.getenv(API_KEY)base_urlos.getenv(BASE_URL)modelos.getenv(MODEL)timeoutint(os.getenv(TIMEOUT,20))max_retriesint(os.getenv(MAX_RETRIES,3))ifnotapi_key:raiseValueError(API_KEY is required)ifnotbase_url:raiseValueError(BASE_URL is required)ifnotmodel:raiseValueError(MODEL is required)return{api_key:api_key,base_url:base_url,model:model,timeout:timeout,max_retries:max_retries,}这个文件的作用统一读取环境变量启动时提前发现问题避免 Key 为空还继续跑五、llm_client.py怎么封装最舒服这里建议把所有 API 调用都放在一个地方。importtimefromopenaiimportOpenAIfromopenaiimportAPIError,APIConnectionError,APITimeoutError,RateLimitErrorfromconfigimportget_config configget_config()clientOpenAI(api_keyconfig[api_key],base_urlconfig[base_url],timeoutfloat(config[timeout]),)defask_llm(prompt:str)-str:last_errorNoneforattemptinrange(1,config[max_retries]1):try:responseclient.chat.completions.create(modelconfig[model],messages[{role:system,content:你是一个专业的技术助手。},{role:user,content:prompt},],)returnresponse.choices[0].message.contentexcept(APIConnectionError,APITimeoutError,RateLimitError,APIError)ase:last_erroreifattemptconfig[max_retries]:wait2*attemptprint(f第{attempt}次失败{wait}秒后重试{e})time.sleep(wait)else:print(f重试结束最终失败{e})raiseRuntimeError(f请求失败{last_error})为什么这样封装因为你后面只要改这个文件就能影响整个项目的调用行为。六、main.py只负责业务逻辑main.py不要再管配置不要再管重试不要再管细节调用。fromllm_clientimportask_llmdefmain():question给我写一个 Flask 接口示例answerask_llm(question)print(answer)if__name____main__:main()这样写的好处主入口非常清楚业务逻辑和基础设施分离后面加更多功能也不乱七、这套结构适合哪些项目特别适合这些场景AI 工具站自动化脚本Agent 工作流文本生成项目个人效率工具技术副业项目如果你后面还打算继续迭代这种拆法会比单文件强很多。八、几个很容易踩坑的地方1. 不要把 Key 写死在代码里一定放.env。2. 不要把请求逻辑散落在各处统一封装到一个文件里。3. 不要把业务和基础设施混在一起main.py只做流程控制。4. 不要忘了做配置校验启动时报错总比运行半天才发现问题好。九、如果你后面要扩展还可以继续加什么当项目变大后你还可以继续加logger.py统一日志cache.py缓存结果retry.py单独抽重试逻辑api/不同接口模块化tests/测试用例但对于个人开发者来说先把上面这套最小结构跑通就够了。十、结语很多项目后面不好维护不是因为功能太复杂而是一开始就把所有东西写在一起。如果你能从第一天就把配置请求业务日志分开处理后面会省很多时间。如果你也在做 AI 工具、脚本自动化或者个人项目可以留言或私信我可以把我整理好的项目模板发给你。免责声明本文内容仅用于技术交流与经验分享不构成任何商业承诺。具体使用效果请以实际测试为准。
延伸阅读

更多相关文章

2026/11/11 22:21:25

暑期狂欢,畅玩一夏!ToDesk远程游戏功能无门槛使用介绍

Hello各位,懂你的ToDesk远程控制,在这个暑期特别为大家准备了一份诚意满满的“畅玩大礼包”!游戏相关功能限时无门槛用!无论你是奔波在通勤路上的学生党,还是想在办公间隙“摸鱼”打两把的上班族,或是躺在床…

2026/11/11 13:40:25

蓝凌EKP18产品:整体架构

一、四层架构总览EKP 流程引擎采用经典的四层分层架构,从外到内依次是:┌─────────────────────────────────────────────────────────┐ │ 应用层 (Application) …

2026/10/24 22:52:44

Sandboxie-Plus虚拟化技术解决软件授权机器码变动问题

1. 项目概述:Sandboxie-Plus如何解决机器码变动问题付费软件授权验证机制中,机器码绑定是最常见的反盗版手段之一。系统会根据硬件配置生成唯一识别码,软件厂商通过验证这个"指纹"来限制安装设备数量。但问题在于——某些情况下&am…

2026/11/12 8:19:30

德州电工证考试在哪里网上查询别被坑!新手报名避坑指南

德州电工证考试在哪里网上查询别被坑!新手报名避坑指南 不知道去哪报名怕被中介坑,尤其是像德州电工证考试在哪里这种信息,网上一搜五花八门,让人眼花缭乱。今天就从实战经验出发,告诉你德州电工证到底该怎么考,怎么避坑,还能帮你搞清楚网上查询的流程…

2026/11/12 8:19:30

电工证证书开头怎么选才能涨薪?良心建议来了

电工证证书开头怎么选才能涨薪?良心建议来了 你是不是正愁找不到工作?手头的电工证证书开头快到期了,还搞不清怎么换证?别急,这期内容专门为你解决这个问题,讲透电工证的价值和换证流程,让你不花冤枉钱,顺利上岗拿高薪。…

2026/11/12 8:19:30

绥德哪里考电工证好 原来外省证也能转过来 上岗必备

绥德哪里考电工证好 原来外省证也能转过来 上岗必备 之前考的证在外省能不能转过来?我跟你说,这事儿别慌,只要你符合政策要求, 外省特种作业操作证完全可以转回绥德使用 ,而且现在 上岗必备 的电工证,不管在哪考,只要流程走对了,就能用上。…

2026/11/12 8:19:30

职称跟电工证区别官方回应你在外省考的证还能用吗

职称跟电工证区别官方回应你在外省考的证还能用吗 之前考的证在外省能不能转过来?这是很多在河南从事劳务施工的班组负责人最关心的问题。特别是在特种作业领域,像低压电工证、焊工证、高处作业证这些证书,关系到能否顺利进场、能否拿到项目。最近有不少人…

2026/11/12 8:19:30

高压电工证好不好考试?证书含金量直接影响你能不能干这行

高压电工证好不好考试?证书含金量直接影响你能不能干这行 证书过期了不知道怎么复审延期,这事儿我见过太多了,身边好几个老电工因为没及时办理,差点丢了饭碗。高压电工证好不好考试?这不光是考试难度的问题, 含金量…

2026/11/11 12:42:59

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/12 0:04:01

工地太忙根本没时间复习考试?学习电工证到哪里学通过率揭秘

工地太忙根本没时间复习考试?学习电工证到哪里学通过率揭秘 工地太忙根本没时间复习考试?你不是一个人。作为一名在南阳卧龙区干了七八年市政公用工程的电工,我深知这个问题的现实性。电工证不仅是工作的“入场券”,更是职业发展的“通行证”,但备考过程…

2026/11/12 0:04:01

双流电工证考别怕挂科!郑州报考避坑指南全攻略

双流电工证考别怕挂科!郑州报考避坑指南全攻略 实操考试心里没底怕挂科?双流电工证考在郑州报名,很多人因为不了解流程、准备不充分,白白浪费时间和金钱。作为三门峡应届工程类毕业生,我也曾经历过这样的焦虑。今天就从零开始,手把手教你如何避开郑州报…

2026/11/12 0:04:01

之前考的证在外省能不能转过来 怎么报名考电工证培训价格多少

之前考的证在外省能不能转过来 怎么报名考电工证培训价格多少 之前考的证在外省能不能转过来?这个问题确实让不少准备换城市工作的朋友犯了难,尤其像电工证这种实操性很强的证书,很多人担心跨省后证书能不能继续用。其实,只要符合相关流程,是可以顺利转…

2026/11/11 20:27:01

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/10 10:29:37

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑