搜尋
首頁後端開發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
Python vs. C:了解關鍵差異Python vs. C:了解關鍵差異Apr 21, 2025 am 12:18 AM

Python和C 各有優勢,選擇應基於項目需求。 1)Python適合快速開發和數據處理,因其簡潔語法和動態類型。 2)C 適用於高性能和系統編程,因其靜態類型和手動內存管理。

Python vs.C:您的項目選擇哪種語言?Python vs.C:您的項目選擇哪種語言?Apr 21, 2025 am 12:17 AM

選擇Python還是C 取決於項目需求:1)如果需要快速開發、數據處理和原型設計,選擇Python;2)如果需要高性能、低延遲和接近硬件的控制,選擇C 。

達到python目標:每天2小時的力量達到python目標:每天2小時的力量Apr 20, 2025 am 12:21 AM

通過每天投入2小時的Python學習,可以有效提升編程技能。 1.學習新知識:閱讀文檔或觀看教程。 2.實踐:編寫代碼和完成練習。 3.複習:鞏固所學內容。 4.項目實踐:應用所學於實際項目中。這樣的結構化學習計劃能幫助你係統掌握Python並實現職業目標。

最大化2小時:有效的Python學習策略最大化2小時:有效的Python學習策略Apr 20, 2025 am 12:20 AM

在兩小時內高效學習Python的方法包括:1.回顧基礎知識,確保熟悉Python的安裝和基本語法;2.理解Python的核心概念,如變量、列表、函數等;3.通過使用示例掌握基本和高級用法;4.學習常見錯誤與調試技巧;5.應用性能優化與最佳實踐,如使用列表推導式和遵循PEP8風格指南。

在Python和C之間進行選擇:適合您的語言在Python和C之間進行選擇:適合您的語言Apr 20, 2025 am 12:20 AM

Python適合初學者和數據科學,C 適用於系統編程和遊戲開發。 1.Python簡潔易用,適用於數據科學和Web開發。 2.C 提供高性能和控制力,適用於遊戲開發和系統編程。選擇應基於項目需求和個人興趣。

Python與C:編程語言的比較分析Python與C:編程語言的比較分析Apr 20, 2025 am 12:14 AM

Python更適合數據科學和快速開發,C 更適合高性能和系統編程。 1.Python語法簡潔,易於學習,適用於數據處理和科學計算。 2.C 語法複雜,但性能優越,常用於遊戲開發和系統編程。

每天2小時:Python學習的潛力每天2小時:Python學習的潛力Apr 20, 2025 am 12:14 AM

每天投入兩小時學習Python是可行的。 1.學習新知識:用一小時學習新概念,如列表和字典。 2.實踐和練習:用一小時進行編程練習,如編寫小程序。通過合理規劃和堅持不懈,你可以在短時間內掌握Python的核心概念。

Python與C:學習曲線和易用性Python與C:學習曲線和易用性Apr 19, 2025 am 12:20 AM

Python更易學且易用,C 則更強大但複雜。 1.Python語法簡潔,適合初學者,動態類型和自動內存管理使其易用,但可能導致運行時錯誤。 2.C 提供低級控制和高級特性,適合高性能應用,但學習門檻高,需手動管理內存和類型安全。

See all articles

熱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

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

熱工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境