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