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 工具、脚本自动化或者个人项目可以留言或私信我可以把我整理好的项目模板发给你。免责声明本文内容仅用于技术交流与经验分享不构成任何商业承诺。具体使用效果请以实际测试为准。

相关新闻

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

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

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

2026/7/23 4:21:12阅读更多 →
DIV+CSS跨浏览器兼容性解决方案全解析

DIV+CSS跨浏览器兼容性解决方案全解析

1. 项目概述:DIVCSS兼容性代码整理的必要性在Web前端开发领域,跨浏览器兼容性一直是开发者面临的永恒挑战。特别是在处理DIVCSS布局时,不同浏览器对CSS规范的解析差异常常导致页面显示效果不一致。我从业十多年来,见证了从IE6到现…

2026/7/23 4:19:12阅读更多 →
FlexRay中断使能与TCR配置实战:汽车电子高可靠通信核心机制解析

FlexRay中断使能与TCR配置实战:汽车电子高可靠通信核心机制解析

1. 项目概述与核心价值在汽车电子和嵌入式系统开发中,尤其是在底盘控制、动力总成和高级驾驶辅助系统(ADAS)这类对实时性和可靠性要求极高的领域,如何高效、可靠地处理通信数据流是一个核心挑战。FlexRay总线以其高带宽、确定性和…

2026/7/23 4:19:12阅读更多 →
Selenium、Pyppeteer、Playwright与Luna:四大浏览器自动化爬虫框架深度对比与选型指南

Selenium、Pyppeteer、Playwright与Luna:四大浏览器自动化爬虫框架深度对比与选型指南

1. 项目概述:为什么我们需要比较这些爬虫框架?做数据采集的朋友,估计都经历过这样的场景:一开始用requests加BeautifulSoup,简单直接,天下我有。直到某天,目标网站加载数据的方式变成了JavaScri…

2026/7/23 5:43:25阅读更多 →
为什么启动文件通常用汇编而不是 C 写?

为什么启动文件通常用汇编而不是 C 写?

难度:★ 本文首发于「OneChan」,未经授权禁止转载。 前两篇文章我们聊了向量表和复位流程。有读者看完后问了一个很实在的问题: “既然 Reset_Handler 里调了 SystemInit 和 __main,这两个都是 C 函数,那为什么 Reset_Handler 自己不能用 C 写?” 这个问题问到了汇编和…

2026/7/23 5:43:25阅读更多 →
AI游戏开发工具深度评测:独立开发者选型指南与实战避坑

AI游戏开发工具深度评测:独立开发者选型指南与实战避坑

1. 项目概述:当AI撞上游戏开发,独立开发者如何“借力打力”?最近两年,AI工具井喷式爆发,从写代码、画原画到生成音效、设计关卡,几乎渗透了游戏开发的每一个环节。作为一名在独立游戏圈摸爬滚打了快十年的老…

2026/7/23 5:43:25阅读更多 →
微软Fluid Textures主题设计与技术实现解析

微软Fluid Textures主题设计与技术实现解析

1. 微软Fluid Textures主题设计解析微软最新发布的2025年首套Windows主题"Fluid Textures"由3D艺术家George Stoyanov操刀设计,这位曾为多家科技巨头设计过壁纸的艺术家,此次带来了16张以流体纹理为核心的高分辨率壁纸(38402160&am…

2026/7/23 5:43:25阅读更多 →
C++性能优化指南:从核心原则到工程实践

C++性能优化指南:从核心原则到工程实践

1. 项目概述:为什么我们需要一份C优化指南?如果你写过几年C,大概率经历过这样的场景:项目初期跑得飞快,随着功能堆叠,代码逐渐变得臃肿,响应时间从毫秒级滑落到秒级。你打开性能分析器&#xff…

2026/7/23 5:43:25阅读更多 →
Trae CN最新版安装与配置全指南

Trae CN最新版安装与配置全指南

1. Trae CN最新版安装指南1.1 环境准备与下载Trae作为新一代智能编程工具,对系统环境有基础要求。Windows用户需确保系统版本在Win10 1809以上,macOS建议升级到11.0(Big Sur)及以上版本。实测发现,安装前关闭杀毒软件可避免误拦截组件下载&am…

2026/7/23 5:41:25阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/23 0:56:31阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/23 0:56:31阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 0:56:31阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:00:28阅读更多 →
从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:28阅读更多 →
油泥处理设备哪里能买到

油泥处理设备哪里能买到

油泥处理设备哪里有?这是许多从事油田、炼化、清罐业务的从业者最关心的问题。根据河南三丰环保设备有限公司的行业经验,选购油泥处理设备的核心在于设备能否适配当地环保法规与原料特性,而非单纯看价格。该公司总经理王钦田先生指出&#xf…

2026/7/23 0:00:28阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/22 22:56:18阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/22 18:55:50阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/22 18:55:50阅读更多 →