咱們學習了模塊和包以後,爲了更好的管理本身的代碼就須要將本身的代碼分爲文件,在分文件夾來管理。有一種廣泛規定的規範嗎?這就是開發目錄規範。mysql
bin 文件夾下爲執行文件sql
core 文件夾下爲主邏輯代碼內容oracle
conf 文件夾下爲配置文件app
lib 文件夾下爲自定義模塊(包)學習
db文件夾爲數據文件spa
log 文件夾下爲日誌文件日誌
readme 軟件介紹文件code
包的本質就是文件夾,因此在Python項目中有__init__文件的就是包blog
init文件的做用是爲了集中全部功能讓外界方便調用。內存
bin文件夾下執行文件,那麼不能爲包。
conf文件夾是軟件的配置信息,好比mysql,oracle,他們明顯不是須要一同調用的,因此不用寫init文件。
core業務邏輯代碼,這其中必定有一個用戶的入口,用戶進入之後只是在這些不一樣的業務中來回執行操做,因此這個文件下的模塊是相互調用的關係,不須要集合功能給外界調用。
db,lib,log邏輯上更上訴結論類似。
總結:項目的標準結構的第一層僅僅是文件不是包。
執行文件須要從core文件下調用主邏輯代碼。主邏輯代碼須要調用日誌,配置,數據,公共模塊等。
但是依照模塊的查找順序,內存已存在的模塊——>內置的模塊——>sys.path中的路徑。
顯然上訴模塊沒法被讀取。因此須要將sys.path中添加能夠查找導入全部文件的路徑。
import sys,os #導入sys模塊添加將路徑添加到sys。path中去, #os模塊,獲取相應的文件路徑 BASE_DIR=os.path.dirname(os.path.dirname(__file__))) #__file__可執行文件的路徑 #os.path.dirname()返回當前文件或文件夾的上級文件夾 #BASE_DIR就是這個開發軟件的根目錄 sys.path.append(BASE_DIR)
import core.src core.src.run()
from conf import settings def login(): with open(settings.DB_PATH) as f: print(f.read())
#配置文件獲取 日誌路徑 from conf import setting #日誌功能 def logger(msg): with open(setting.LOG_PATH,‘a’,encoding= 'utf-8') as f: f.write(msg)
主邏輯代碼導入模塊