Python 项目如何避免入口文件越来越重
很多 Python 项目在初期只有一个简单的启动脚本,随着配置项、数据库连接、日志初始化、任务调度不断叠加,入口文件就会变成最难维护的部分。入口承担的事情过多,通常意味着后续改动越来越危险。
一、入口文件只保留三类职责
- 读取运行参数和配置。
- 装配依赖,例如数据库、缓存、消息队列客户端。
- 启动应用或执行命令分发。
业务逻辑、SQL、接口细节都不应该继续堆在入口层。入口的作用更像“装配台”,而不是“工作台”。
二、把依赖装配显式化
def build_app() -> FastAPI:
settings = load_settings()
logger = create_logger(settings)
db = create_db_engine(settings)
cache = create_cache(settings)
app = FastAPI(title="research-service")
register_routes(app, db=db, cache=cache, logger=logger)
return app
这样的结构有两个优点。第一,初始化顺序清晰;第二,测试时可以替换掉单个依赖,而不需要从头跑完整个启动流程。
三、用模块边界替代“公共工具箱”
很多项目后面变得难以维护,不是因为代码量大,而是因为大家把功能都扔进一个叫 utils.py 或 common.py 的文件里。时间一长,任何模块都依赖它,结果形成隐性耦合。
更稳的方式是:配置归配置、模型归模型、数据访问归数据访问,尽量让模块名称体现职责,而不是只体现“方便放东西”。
四、命令行脚本和 Web 服务不要共用同一个入口
如果一个项目既有接口服务,又有定时脚本或离线处理任务,最好按命令拆分入口。这样部署、回滚和排障时都更明确。