小猿圈python學(xué)習(xí)-包&跨模塊代碼調(diào)用

包(Package)

當(dāng)你的模塊文件越來越多,就需要對(duì)模塊文件進(jìn)行劃分,比如把負(fù)責(zé)跟數(shù)據(jù)庫交互的都放一個(gè)文件夾,把與頁面交互相關(guān)的放一個(gè)文件夾,

my_proj/

├── apeland_web? #代碼目錄

│? ├── __init__.py

│? ├── admin.py

│? ├── apps.py

│? ├── models.py

│? ├── tests.py

│? └── views.py

├── manage.py

└── my_proj? ? #配置文件目錄

? ? ├── __init__.py

? ? ├── settings.py

? ? ├── urls.py

? ? └── wsgi.py

像上面這樣,一個(gè)文件夾管理多個(gè)模塊文件,這個(gè)文件夾就被稱為包

一個(gè)包就是一個(gè)文件夾,但該文件夾下必須存在?init.py 文件, 該文件的內(nèi)容可以為空,?int.py用于標(biāo)識(shí)當(dāng)前文件夾是一個(gè)包。

這個(gè)init.py的文件主要是用來對(duì)包進(jìn)行一些初始化的,當(dāng)當(dāng)前這個(gè)package被別的程序調(diào)用時(shí),init.py文件會(huì)先執(zhí)行,一般為空, 一些你希望只要package被調(diào)用就立刻執(zhí)行的代碼可以放在init.py里,一會(huì)后面會(huì)演示。

跨模塊導(dǎo)入

目錄結(jié)構(gòu)如下

my_proj

├── apeland_web

│? ├── __init__.py

│? ├── admin.py

│? ├── apps.py

│? ├── models.py

│? ├── tests.py

│? └── views.py

├── manage.py

└── my_proj

? ? ├── settings.py

? ? ├── urls.py

? ? └── wsgi.py

根據(jù)上面的結(jié)構(gòu),如何實(shí)現(xiàn)在apelandweb/views.py里導(dǎo)入myproj/settings.py模塊?

直接導(dǎo)入的話,會(huì)報(bào)錯(cuò),說找到不模塊

是因?yàn)槁窂秸也坏剑琺y_proj/settings.py 相當(dāng)于是apeland_web/views.py的父親(apeland_web)的兄弟(my_proj)的兒子(settings.py),settings.py算是views.py的表弟啦,在views.py里只能導(dǎo)入同級(jí)別兄弟模塊代碼,或者子級(jí)別包里的模塊,根本不知道表弟表哥的存在。這可怎么辦呢?

答案是添加環(huán)境變量,把父親級(jí)的路徑添加到sys.path中,就可以了,這樣導(dǎo)入 就相當(dāng)于從父親級(jí)開始找模塊了。

apeland_web/views.py中添加環(huán)境變量

import sys ,os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #__file__的是打印當(dāng)前被執(zhí)行的模塊.py文件相對(duì)路徑,注意是相對(duì)路徑

print(BASE_DIR) # 輸出是/Users/alex/PycharmProjects/apeland_py_learn/day4_常用模塊/my_proj

sys.path.append(BASE_DIR)

from? my_proj import settings

print(settings.DATABASES)

官方推薦的跨目錄導(dǎo)入方法

雖然通過添加環(huán)境變量的方式可以實(shí)現(xiàn)跨模塊導(dǎo)入,但是官方不推薦這么干,因?yàn)檫@樣就需要在每個(gè)目錄下的每個(gè)程序里都寫一遍添加環(huán)境變量的代碼。

官方推薦的玩法是,在項(xiàng)目里創(chuàng)建個(gè)入口程序,整個(gè)程序調(diào)用的開始應(yīng)該是從入口程序發(fā)起,這個(gè)入口程序一般放在項(xiàng)目的頂級(jí)目錄

這樣做的好處是,項(xiàng)目中的二級(jí)目錄 apeland_web/views.py中再調(diào)用他表親my_proj/settings.py時(shí)就不用再添加環(huán)境變量了。

原因是由于manage.py在頂層,manage.py啟動(dòng)時(shí)項(xiàng)目的環(huán)境變量路徑就會(huì)自動(dòng)變成….xxx/my_proj/這一級(jí)別

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容