python?中的?module?和?package
接著如何在python 中導(dǎo)入 package的分享,這一次是在 package 下繼續(xù)嵌套一個(gè) package ,
項(xiàng)目目錄如下:
pkg1 ---__init__.py ---mod1.py ------pkg2 ---------__init__.py ---------mod2.py
import pkg1.pkg2.mod2
我們嘗試將 mod2 進(jìn)行導(dǎo)入,這一次將先導(dǎo)入 pkg1 然后 pkg2 最后導(dǎo)入 mod2
import pkg1 import pkg2 import mod2
從輸出上來(lái)看,我們發(fā)現(xiàn) mod1 并沒(méi)有自動(dòng)被導(dǎo)入進(jìn)來(lái)。
import pkg1.pkg2.mod2 pkg1.pkg2.mod2.say_hi()
我們通過(guò)pkg1.pkg2.mod2.say_hi()來(lái)訪(fǎng)問(wèn) mod2 中 say_hi 函數(shù)。
print('pkg1' in sys.modules)#True
print('pkg1.pkg2' in sys.modules)#True
print('pkg1.pkg2.mod2' in sys.modules)#True
通過(guò)給導(dǎo)入 module 起一個(gè)別名方式來(lái)快捷地訪(fǎng)問(wèn) mod2 module 對(duì)象的屬性。python 會(huì)自動(dòng)執(zhí)行可以訪(fǎng)問(wèn)到 mod2 經(jīng)過(guò)的 package ,通過(guò)輸出不難發(fā)現(xiàn)這些 package 已經(jīng)被導(dǎo)入,并添加到了 sys.modules 緩存中。
import pkg1.pkg2.mod2 as mod2 mod2.say_hi()
pkg1 ---__init__.py ---mod1.py ------pkg2 ---------__init__.py ---------mod2.py main.py
在 pkg1 package 下 __init__.py
import pkg1.pkg2.mod2
print("import pkg1")
這我們?cè)?pkg1 package 下的 __init__.py 文件導(dǎo)入 mod2 module 是絕對(duì)路徑 pkg1.pkg2.mod2。表示我們執(zhí)行 __init__.py 文件是在 pkg1 外面執(zhí)行,所以路徑中也包含了 pkg1,對(duì)于這個(gè) project 來(lái)說(shuō),main.py 是入口文件,要執(zhí)行這個(gè)項(xiàng)目,我們只需要執(zhí)行文件夾下 main.py 文件即可。pkg1 和 main.py 位于同一個(gè)目錄級(jí)別,任何子模塊(sub-module)都是
import pkg1.pkg2.mod2 as mod2 mod2.say_hi()
為了解釋我們進(jìn)一步說(shuō)明,我們?cè)偃?chuàng)建一個(gè)項(xiàng)目,項(xiàng)目下放兩個(gè)
main.py my_mod.py
import socket
x=2
def say_hi():
print("say hi from my mod")
在 main.py 代碼如下
import my_mod as mod print(mod.x) print(mod.socket.gethostname())
從而我們知道,我們?cè)?main.py 導(dǎo)入 my_mod 作為,然后在 my_mod 文件導(dǎo)入 socket module 可以通過(guò) mod.socket 導(dǎo)入。
server ---app.py
這里我們 app.py 里只添加了一個(gè)語(yǔ)句,在終端輸出
print("running app")
在 python 中,可以在目錄下搜索指定的文件并執(zhí)行,python 解釋器提供 -m 參數(shù)可以讓我們指定module 名稱(chēng)來(lái)執(zhí)行一個(gè) python module 文件,所以可以通過(guò)下面語(yǔ)句來(lái)運(yùn)行 server 文件夾下的 app.py 文件。
python -m server.app
python 會(huì)在 sys.path 路徑搜索 `server/app.py
我們也可以將 server 下的 app.py 重命名為 __main__.py 如下
server ---__main__.py
這樣就可以直接通過(guò) python -m server 語(yǔ)句來(lái)執(zhí)行 server package 下的 __main__.py 文件。當(dāng)然我們可以同時(shí)在 server package 創(chuàng)建一個(gè) __init__.py 和 __main__.py 兩個(gè)文件。
到此這篇關(guān)于 python 中的 module 和 package 的文章就介紹到這了,更多相關(guān) module 和 package 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python使用Tkinter實(shí)現(xiàn)在線(xiàn)音樂(lè)播放器
這篇文章主要為大家詳細(xì)介紹了python使用Tkinter實(shí)現(xiàn)在線(xiàn)音樂(lè)播放器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
python使用property完成數(shù)據(jù)隱藏封裝與校驗(yàn)
這篇文章主要為大家詳細(xì)介紹了python使用property完成數(shù)據(jù)隱藏封裝與校驗(yàn),實(shí)現(xiàn)安全修改,文中的示例代碼講解詳細(xì),希望對(duì)大家有所幫助2024-11-11
Django對(duì)models里的objects的使用詳解
今天小編就為大家分享一篇Django對(duì)models里的objects的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08
python+matplotlib繪制3D條形圖實(shí)例代碼
這篇文章主要介紹了python+matplotlib繪制3D條形圖實(shí)例代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01
Python繪制K線(xiàn)圖之可視化神器pyecharts的使用
這篇文章主要介紹了Python繪制K線(xiàn)圖之可視化神器pyecharts的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03

