
你有没有过这样的经历?
刚开始写Python代码时,所有东西都塞进一个文件里,简单粗暴。但随着项目越做越大,文件越来越长,维护起来简直是一场噩梦。
说实话,合理的项目结构对代码的可维护性、可扩展性和团队协作至关重要。今天,我就带你看看5种常见的Python项目布局,帮你选对结构,少走弯路。
往期阅读>>>
Python 自动化管理Jenkins的15个实用脚本,提升效率
App2Docker:如何无需编写Dockerfile也可以创建容器镜像
Python 自动化识别Nginx配置并导出为excel文件,提升Nginx管理效率
适用场景: 简单脚本、一次性任务、小型工具
结构示例:
calculator.pyrequirements.txtREADME.md使用说明:
代码示例:
# calculator.py"""简易计算器应用"""def add(a, b): """加法运算""" return a + bdef subtract(a, b): """减法运算""" return a - bdef main(): print("简易计算器") num1 = float(input("输入第一个数字: ")) num2 = float(input("输入第二个数字: ")) result = add(num1, num2) print(f"{num1} + {num2} = {result}")if __name__ == "__main__": main()这种结构就像是把所有工具都塞进一个工具箱,简单直接。但是一旦工具太多,找起来就麻烦了。
适用场景: 中等复杂度应用,需要功能分离
结构示例:
data_processor/├── main.py├── data_loader.py├── data_cleaner.py├── analyzer.py├── config.py├── requirements.txt└── README.md使用说明:
代码示例:
# data_loader.pydef load_csv(filepath): """加载CSV文件""" import pandas as pd return pd.read_csv(filepath)# data_cleaner.py def remove_duplicates(df): """去除重复数据""" return df.drop_duplicates()# analyzer.pydef calculate_statistics(df): """计算基本统计量""" return df.describe()# main.pyfrom data_loader import load_csvfrom data_cleaner import remove_duplicatesfrom analyzer import calculate_statisticsdef process_data(filepath): data = load_csv(filepath) clean_data = remove_duplicates(data) stats = calculate_statistics(clean_data) return stats为什么要模块化?
就像整理衣柜,把T恤、裤子、外套分类放好,以后找起来就快多了。代码也是一样,功能分清楚,维护起来才不会头疼。
适用场景: 大型项目,需要层次化组织
结构示例:
ml_project/├── __init__.py├── main.py├── data/│ ├── __init__.py│ ├── preprocessing.py│ └── validation.py├── models/│ ├── __init__.py│ ├── trainer.py│ └── predictor.py├── utils/│ ├── __init__.py│ └── helpers.py├── tests/│ ├── test_data.py│ └── test_models.py├── requirements.txt└── README.md使用说明:
代码示例:
# ml_project/data/preprocessing.pydef normalize_data(data): """数据标准化""" return (data - data.mean()) / data.std()# ml_project/models/trainer.pyfrom ..data.preprocessing import normalize_dataclass ModelTrainer: def __init__(self, model): self.model = model def train(self, X, y): X_normalized = normalize_data(X) self.model.fit(X_normalized, y)包布局结构就像是一栋大楼,每层楼有不同功能,房间划分清晰,找东西、管理起来都方便。
适用场景: 需要清晰分离关注点的应用
结构示例:
task_manager/├── models/│ ├── __init__.py│ └── task.py├── views/│ ├── __init__.py│ └── cli.py├── controllers/│ ├── __init__.py│ └── task_controller.py├── utils/│ └── __init__.py└── main.py使用说明:
代码示例:
# models/task.pyclass Task: def __init__(self, title, description): self.title = title self.description = description self.completed = False# views/cli.pyclass TaskView: def show_tasks(self, tasks): for i, task in enumerate(tasks, 1): status = "✓" if task.completed else "✗" print(f"{i}. [{status}] {task.title}")# controllers/task_controller.pyfrom models.task import Taskfrom views.cli import TaskViewclass TaskController: def __init__(self): self.tasks = [] self.view = TaskView() def add_task(self, title, description): task = Task(title, description) self.tasks.append(task)MVC是什么? 就像一家餐厅,厨师在厨房做饭(Model),服务员端菜上桌(View),经理负责协调(Controller)。各司其职,效率更高。
适用场景: Flask、Django等Web框架项目
结构示例:
blog_app/├── app/│ ├── __init__.py│ ├── routes.py│ ├── models/│ │ └── post.py│ ├── templates/│ │ └── index.html│ └── static/│ ├── css/│ └── js/├── tests/├── config.py├── run.py└── requirements.txt使用说明:
代码示例:
# app/__init__.pyfrom flask import Flaskdef create_app(): app = Flask(__name__) from .routes import main app.register_blueprint(main) return app# app/routes.pyfrom flask import Blueprint, render_templatemain = Blueprint('main', __name__)@main.route('/')def index(): return render_template('index.html')# run.pyfrom app import create_appapp = create_app()if __name__ == '__main__': app.run(debug=True)Web应用结构就像是一套完整的房子,有客厅(templates)、厨房(app)、卧室(models),每个区域都有专门用途。
说到底,选择合适的项目结构能够显著提升开发效率和代码质量。根据项目规模和发展需求,灵活选择最适合的结构方案。
记住: 项目结构不是一成不变的,随着项目成长,及时调整结构才能走得更远。
💬 你平时用什么项目结构?评论区聊聊~
如果对你有帮助,点个在看让更多人看到吧 👇
想高效学习Python?下面三本精选好书满足你的不同需求!
《流畅的Python(第2版)》——Python进阶必读!深入讲解高级特性与最佳实践,适合想精进的开发者。
《Python从新手到高手》:初学者首选,系统学习全栈技能。
《Python数据分析:从零基础入门到案例实战》——数据科学利器!手把手教你用Python处理数据,实战案例学完就能用。
三本书均支持先用后付、运费险和7天无理由退货,放心购买!点击“购买”按钮,立即开启你的Python学习之旅吧!
https://ima.qq.com/wiki/?shareId=f2628818f0874da17b71ffa0e5e8408114e7dbad46f1745bbd1cc1365277631c
