"項目目錄結構"其實也是屬於"可讀性和可維護性"的範疇。 目錄組織方式 關於如何組織一個較好的Python工程目錄結構,已經有一些得到了共識的目錄結構。在Stackoverflow的這個問題上,能看到大家對Python目錄結構的討論。 這裡面說的已經很好了,我也不打算重新造輪子列舉各種不同的方式,這 ...
"項目目錄結構"其實也是屬於"可讀性和可維護性"的範疇。
目錄組織方式
關於如何組織一個較好的Python工程目錄結構,已經有一些得到了共識的目錄結構。在Stackoverflow的這個問題上,能看到大家對Python目錄結構的討論。
這裡面說的已經很好了,我也不打算重新造輪子列舉各種不同的方式,這裡面我說一下我的理解和體會。
假設你的項目名為foo, 我比較建議的最方便快捷目錄結構這樣就足夠了:
Foo/
|-- bin/
| |-- foo
|
|--conf/
| |--__init__.py
| |--settings.py
|
|-- foo/
| |-- tests/
| | |-- __init__.py
| | |-- test_main.py
| |
| |-- __init__.py
| |-- main.py
|
|-- docs/
| |-- conf.py
| |-- abc.rst
|
|-- setup.py
|-- requirements.txt
|-- README
簡要解釋一下:
bin/
: 存放項目的一些可執行文件,當然你可以起名script/
之類的也行。- conf/:存放項目配置文件
foo/
: 存放項目的所有源代碼。(1) 源代碼中的所有模塊、包都應該放在此目錄。不要置於頂層目錄。(2) 其子目錄tests/
存放單元測試代碼; (3) 程式的入口最好命名為main.py
。docs/
: 存放一些文檔。setup.py
: 安裝、部署、打包的腳本。requirements.txt
: 存放軟體依賴的外部Python包列表。README
: 項目說明文件。
除此之外,有一些方案給出了更加多的內容。比如LICENSE.txt
,ChangeLog.txt
文件等,我沒有列在這裡,因為這些東西主要是項目開源的時候需要用到。如果你想寫一個開源軟體,目錄該如何組織,可以參考這篇文章。
如何使用不同目錄下的文件
以上圖目錄結構為例,我們在main.py中,使用bin目錄下文件,首先需要找到Foo/目錄,然後才能導入Foo/下的子目錄的模塊,並且需要做到自動獲取,不能寫死,這時候就使用到os模塊
import os
import sys
1、找到文件的絕對路徑
os.path.abspath(__file__) #獲取文件的絕對路徑,包含文件名
2、獲取文件的目錄
os.path.dirname(os.path.abspath(__file__) ) # 例如main.py的目錄是foo/
3、再次獲取文件目錄的父目錄
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__) ))
4、添加到環境變數中
sys.path.append(BASE_DIR)
5、導入需要的目錄
①. import bin
②. from bin import *
二種方式導入,各有優缺點,後續會詳細講解,至此,就可以使用其他目錄的模塊,歡迎各位看官留言指點