Python 应用程序的项目结构
Vaibhav Vaibhav
2023年1月30日
2022年5月17日
在处理实际应用程序时,代码库的大小可能会急剧增加。通常,不建议编写单体程序或将所有应用程序代码放在一个文件中。其背后的原因是单体程序可能会产生更多意想不到的错误。随着程序规模的增加并且不促进协作,它变得难以管理和不可读。
由于此类问题,建议将应用程序拆分为更小的段或微服务,独立于其他服务执行其指定的任务。这样的设置不仅促进了简单和更好的管理,而且促进了可读性和生产力。本文将讨论我们通常应该如何构建我们的 Python 应用程序,以实现更好的管理、可读性和生产力。
Python 应用程序的项目结构
这个想法是将程序拆分为更小的组件或微服务。这些本质上是一些包含 Python 文件的目录,它们仅执行分配给它们的任务。这些通常是独立于其他服务的独立文件。这样,可以轻松删除或添加服务。
请注意,提到的某些目录或段可能适用于也可能不适用于全局的每个应用程序,因为某些应用程序很简单,不需要太多的测试和管理。同时,有些非常冗长且健壮,需要持续关注和管理。
这些目录和文件应该在一个空的父项目文件夹下创建。
LICENSE
:此文件包含有关使用应用程序的指南和应用程序分发详细信息的法律信息。README.md
:此 Markdown 文件包含应用程序的简要说明、其文件、设置和运行应用程序的指南、贡献指南、应用程序是否开源等。setup.py
或run.py
:该文件是任何 Python 应用程序的入口点。这意味着每当我们希望按照类似的项目结构运行 Python 应用程序时,我们必须简单地执行这个文件。env
或environment
:这是应用程序的 Python 虚拟环境。requirements.txt
:此文本文件包含有关 Python 应用程序依赖项的信息。/<sub-application>
:此文件夹包含独立的子应用程序或微服务。这些文件夹应该有一个__init__.py
使它们成为 Python 模块。我们可以分别以应用程序和蓝图的形式在 Django 和 Flask 应用程序中找到这样的文件夹。请注意,由于这些迷你应用程序或微服务独立于其他此类应用程序,因此它们可以拥有自己的/tests
、/static
、/templates
文件夹和models.py
和forms.py
文件。/docs
:该文件夹包含 Python 应用程序的文档。通常期望文档是健壮和全面的,以便最终用户可以毫无问题地理解应用程序。/tests
:此文件夹包含应用程序的所有测试。由于在将任何应用程序投入生产之前测试是必不可少的步骤,因此它应该有自己的专用目录。随着应用程序或功能的增长,测试数量会急剧增加。/static
:此文件夹包含应用程序的所有静态文件,例如图像、视频、徽标和图标。如果项目是一个 Web 应用程序,static
文件夹也将包含 CSS 和 JavaScript 文件。可以在 Django 和 Flask 应用程序中找到这个文件夹。/templates
:该文件夹包含 Python 应用程序使用的所有 HTML 模板。通常,此文件夹与 Python Web 应用程序相关,因为 Web 需要 HTML。同样,我们可以在 Django 和 Flask 应用程序中找到这个文件夹。models.py
:该文件包含数据库模型的 Python 代码。使用 ORM 或对象关系映射时,表示数据库模型的 Python 类在此文件中定义。database.db
:该文件是 Python 应用程序使用的数据库。仅当应用程序使用简单的基于文件的数据库(如 SQLite3)时才需要或创建此文件。
例子
假设我们正在开发一个基于 Web 的个人博客网站。那么这样一个应用程序的项目结构将如下所示。
blog/
|-- LISCENSE
|-- README.md
|-- run.py
|-- models.py
|-- database.d
|-- environment/
|-- * files *
|-- requirements.txt
|-- users/
|-- __init__.py
|-- forms.py
|-- routes.py
|-- * files *
|-- blogs/
|-- __init__.py
|-- forms.py
|-- routes.py
|-- * files *
|-- docs/
|-- * files *
|-- tests/
|-- users/
|-- * files *
|-- blogs
|-- * files *
|-- static/
|-- users
|-- * files *
|-- blogs
|-- * files *
|-- templates/
|-- users
|-- * files *
|-- blogs
|-- * files *
Author: Vaibhav Vaibhav