首頁 後端開發 Python教學 為什麼要設計好目錄結構?

為什麼要設計好目錄結構?

Jul 20, 2017 pm 03:50 PM
python 目錄

        在網站設計站點時,應該事先在電腦硬碟上建立一個資料夾,作為工作的起點,然後在資料夾下新建若干個子資料夾,形成合理的目錄結構,以便將不同類型的文件存放在站台中。
       目錄的結構是網站建設中一個容易被忽略的問題,初學者往往很少進行規劃,隨意創建子目錄,甚至連目錄名也是信手拈來,事後連自己也忘記了這個目錄是為什麼建立、準備存放哪一類文件的。嚴格說來,目錄結構的好壞,瀏覽者不會有明顯的感覺,但是對網站本身的維護,以後內容的擴充和移植卻有著重要的影響。

為什麼要設計好目錄結構?

#"設計專案目錄結構",就和"程式碼編碼風格"一樣,屬於個人風格問題。對於這種風格上的規範,一直都存在著兩種態度:

  1.一類同學認為,這種個人風格問題"無關緊要"。理由是能讓程式work就好,風格問題根本不是問題;

  2.另一類同學認為,規範化能更好的控製程式結構,讓程式具有更高的可讀性;

  我是比較偏向後者的,因為我是前一類同學思想行為下的直接受害者。我曾經維護過一個非常不好讀的項目,其實現的邏輯並不復雜,但是卻耗費了我非常長的時間去理解它想表達的意思。從此我個人對於提高專案可讀性、可維護性的要求就很高了。 "專案目錄結構"其實也是屬於"可讀性和可維護性"的範疇,我們設計一個層次清晰的目錄結構,就是為了達到以下兩點:

#  1.可讀性高: 不熟悉這個專案的程式碼的人,一眼就能看懂目錄結構,知道程式啟動腳本是哪個,測試目錄在哪裡,設定檔在哪裡等等。從而非常快速的了解這個項目;

  2.可維護性高: 定義好組織規則後,維護者就能很明確地知道,新增的哪個文件和程式碼應該放在什麼目錄之下。這個好處是,隨著時間的推移,程式碼/配置的規模增加,專案結構不會混亂,仍然能夠組織良好.

  所以,我認為,保持一個層次清晰的目錄結構是有必要的。更何況組織一個良好的工程目錄,其實是一件很簡單的事兒.

  目錄組織方式

#  關於如何組織一個較好的Python工程目錄結構,已經有一些得到了共識的目錄結構。在Stackoverflow的這個問題上,可以看到大家對Python目錄結構的討論.

  這裡面說的已經很好了,我也不打算重新造輪子列舉各種不同的方式,這裡面我說一下我的理解和體會.

  假設你的專案名為foo, 我比較建議的最方便快捷目錄結構這樣就足夠了:

  Foo /

  |-- bin/

    | |-- foo

  |

#  |-- foo/

#    | |-- tests/

#########      | | |-- __init__.py ########### #######      | | |-- test_main.py ##################    | | ############### ###    | |-- __init__.py ###################    | |-- main.py ############################## # ###  | #########

  |-- docs/

    | |-- conf.py

    | |-- abc.rst

    |

# #  |-- setup.py

#  |-- requirements.txt

  | -- README

  簡單解釋一下:

  1.bin/: 存放項目的一些可執行文件,當然你可以取名

script/

之類的也行;

#  2.foo/: 存放專案的所有原始碼。 (1) 原始碼中的所有模組、套件都應該放在此目錄中。不要置於頂層目錄。 (2) 其子目錄

tests/

存放單元測試程式碼;(3) 程式的入口最好命名為 main.py;

  3.

docs/

: 存放一些文件;  4.

setup.py

: 安裝、部署、打包的腳本;  5.requirements.txt

#  5.

requirements.txt: 存放軟體所依賴的外部Python套件清單;

  6.README

: 項目說明文件. ############  除此之外,有一些方案給了更多的內容。例如###LICENSE.txt###,###ChangeLog.txt###檔案等,我沒有列在這裡,因為這些東西主要是專案開源的時候需要用到。如果你想寫一個開源軟體,目錄該如何組織,可以參考這篇文章;#############  下面,再簡單講一下我對這些目錄的理解和個人要求吧. ############  ###關於README的內容###############  ###這個我覺得是每個項目都應該有的一個文件###,目的是能簡要描述該項目的訊息,讓讀者快速了解這個項目. ############  它需要說明以下幾個事項:############  1.軟體定位,軟體的基本功能;############################################################### ####  2.執行程式碼的方法: 安裝環境、啟動指令等;############  3.簡單的使用說明;############  4 .程式碼目錄結構說明,更詳細點可以說明軟體的基本原理;############  5.常見問題說明. ############  我覺得有以上幾點是比較好的一個###README###。在軟體開發初期,由於開發過程中以上內容可能不明確或發生變化,因此並非一定要在一開始就將所有資訊都補全。但是在專案結束的時候,是需要撰寫這樣的一個文件的。 ############  可以參考Redis原始碼中Readme的寫法,這裡面簡潔但是清晰的描述了Redis功能和源碼結構. ###############  關於requirements.txt與setup.py##################  setup.py####### #########  一般來說,用###setup.py###來管理程式碼的打包、安裝、部署問題。業界標準的寫法是用Python流行的打包工具setuptools來管理這些事情。這種方式普遍應用於開源專案中。不過這裡的核心思想不是用標準化的工具來解決這些問題,而是說,###一個專案一定要有一個安裝部署工具###,能快速便捷的在一台新機器上將環境裝好、程式碼部署好和將程式運行起來。 ############  這個我是踩過坑的. ############  我剛開始接觸Python寫專案的時候,安裝環境、部署程式碼、執行程式這個過程全是手動完成,遇到以下問題:#######

  1.安裝環境時常常忘了最近又增加了一個新的Python包,結果一到線上運行,程式就出錯了;

  2. Python套件的版本依賴問題,有時候我們程式中使用的是一個版本的Python包,但是官方的已經是最新的包了,透過手動安裝就可能裝錯了;

  3.如果依賴的包很多的話,一個一個安裝這些依賴是很費時的事情;

  4.新同學開始寫專案的時候,將程式跑起來非常麻煩,因為可能常常忘了要怎麼安裝各種依賴.

  setup.py可以將這些事情自動化起來,提高效率、減少出錯的機率。 "複雜的東西自動化,能自動化的東西一定要自動化。"是一個非常好的習慣。 setuptools的文件比較龐大,剛接觸的話,可能不太好找到切入點。學習科技的方式就是看他人是怎麼用的,可以參考一下Python的一個Web框架,flask是如何寫的: setup.py.

  當然,簡單點自己寫個安裝腳本(deploy.sh)替代setup.py也未嘗不可.

  requirements.txt

#  這個檔案存在的目的是:

  1.方便開發者維護軟體的套件依賴。將開發過程中新增的套件加入到這個清單中,避免在

setup.py

安裝依賴時漏掉軟體包;  2.方便讀者明確專案使用了哪些Python套件。   這個檔案的格式是每一行包含一個套件依賴的說明,通常是

flask>=0.10

這種格式,要求是這個格式能被pip識別,這樣就可以簡單的透過 

pip install -r requirements.txt

來把所有Python套件依賴都裝好了。具體格式說明: 點這裡。   關於設定檔的使用方法

#  注意,在上面的目錄結構中,沒有將conf.py放在原始碼目錄下,而是放在

docs/

目錄下:

#  許多項目對設定檔的使用做法是:#  1.設定檔寫在一個或多個python檔案中,例如這裡的conf.py;

  2.專案中哪個模組用到這個設定檔就直接透過

import conf

這種形式來在程式碼中使用設定.

  這種做法我不太認同:

  1.這讓單元測試變得困難(因為模組內部依賴了外部設定) ;  2.另一方面設定檔作為使用者控製程式的接口,應當可以由使用者自由指定該檔案的路徑;

# 3.程式元件可重複使用性太差,因為這種貫穿所有模組的程式碼硬編碼方式,使得大部分模組都依賴

conf.py

這個檔;

  所以,我認為配置的使用,更好的方式是:

  1.模組的配置都是可以靈活配置的,不受外部配置文件的影響;

###  2.程式的設定也是可以靈活控制的. ############  能夠佐證這個想法的是,用過nginx和mysql的同學都知道,nginx、mysql這些程式都可以自由的指定使用者設定。 ######

  所以,不應當在程式碼中直接import conf來使用設定檔。上面目錄結構中的conf.py,是給定的一個設定樣例,不​​是在寫死在程式中直接引用的設定檔。可以透過給main.py啟動參數指定配置路徑的方式來讓程式讀取配置內容。當然,這裡的conf.py你可以換個類似的名字,像是settings.py。或者你也可以使用其他格式的內容來編寫設定文件,像是settings.yaml之類的。

    模組中,不同檔案的調用問題,在同級目錄下面才能夠實現相互調用,如果在不同級的模組中,則要配置環境變量,讓程式在相同的目錄結構下.

  配置環境變數的步驟如下:

  '''配置環境變量,由於是在不同目錄中進行導入,要先配置配環境變量,讓程式在同級目錄狀態下,才能夠實現相互調用'''
  import sys,os
  '''os .path.abspath是取檔案的絕對路徑'''
  data = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__) )))
  print(data)
  sys.path.append(data)

##  首先,導入模組sys,os,__file__是取得目前檔案的檔案名稱;os.path.abspath()是取得目前檔案的絕對路徑;os.path.dirname()是取得目前檔案路徑的上一層路徑;sys.path.append()是把目前檔案路徑加入到檔案路徑中,以實現檔案路徑的配置,實現在同級中的呼叫.

  

#  上面是一個App的完整檔案類型,不同檔案中存放不同的功能模組,App有一個程式主入口,其實我們在呼叫主入口的時候,環境變數就是程式的主入口位置.以後寫程式要規範書寫,試試不同模組之間的呼叫;下面來看一個簡單的web框架類型:

#######  首先,上面是一個dj框架:###### #######  --backend前端,用來存放資料庫驗證模組,和邏輯模組;############  --config檔案設定模組,用來存放檔案的設定資訊; ############  --frontend是前端;#############  --user_main.py是程式的主入口,程式的執行模組. ######

以上是為什麼要設計好目錄結構?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1325
25
PHP教程
1273
29
C# 教程
1252
24
PHP和Python:解釋了不同的範例 PHP和Python:解釋了不同的範例 Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

在PHP和Python之間進行選擇:指南 在PHP和Python之間進行選擇:指南 Apr 18, 2025 am 12:24 AM

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

sublime怎麼運行代碼python sublime怎麼運行代碼python Apr 16, 2025 am 08:48 AM

在 Sublime Text 中運行 Python 代碼,需先安裝 Python 插件,再創建 .py 文件並編寫代碼,最後按 Ctrl B 運行代碼,輸出會在控制台中顯示。

Python vs. JavaScript:學習曲線和易用性 Python vs. JavaScript:學習曲線和易用性 Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

PHP和Python:深入了解他們的歷史 PHP和Python:深入了解他們的歷史 Apr 18, 2025 am 12:25 AM

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

Golang vs. Python:性能和可伸縮性 Golang vs. Python:性能和可伸縮性 Apr 19, 2025 am 12:18 AM

Golang在性能和可擴展性方面優於Python。 1)Golang的編譯型特性和高效並發模型使其在高並發場景下表現出色。 2)Python作為解釋型語言,執行速度較慢,但通過工具如Cython可優化性能。

vscode在哪寫代碼 vscode在哪寫代碼 Apr 15, 2025 pm 09:54 PM

在 Visual Studio Code(VSCode)中編寫代碼簡單易行,只需安裝 VSCode、創建項目、選擇語言、創建文件、編寫代碼、保存並運行即可。 VSCode 的優點包括跨平台、免費開源、強大功能、擴展豐富,以及輕量快速。

notepad 怎麼運行python notepad 怎麼運行python Apr 16, 2025 pm 07:33 PM

在 Notepad 中運行 Python 代碼需要安裝 Python 可執行文件和 NppExec 插件。安裝 Python 並為其添加 PATH 後,在 NppExec 插件中配置命令為“python”、參數為“{CURRENT_DIRECTORY}{FILE_NAME}”,即可在 Notepad 中通過快捷鍵“F6”運行 Python 代碼。

See all articles