python3 import機(jī)制梳理

秉承復(fù)習(xí)自己,共享他人的原則,簡(jiǎn)單梳理下python3 import機(jī)制

首先查找器的幾大順序
1.內(nèi)置
2.freeze 模塊(見(jiàn)鏈接 https://wiki.python.org/moin/Freeze)
3.當(dāng)前執(zhí)行目錄
4.第三方庫(kù)

import 導(dǎo)入方式
1.絕對(duì)導(dǎo)入(用A代替)
2.相對(duì)導(dǎo)入(用B代替)

舉個(gè)例子,如下目錄結(jié)構(gòu)

package
├── __init__.py
├── main.py
├── moduleA.py
├── subpackage1
│   ├── __init__.py
│   ├── moduleX.py
│   └── moduleY.py
└── subpackage2
    ├── __init__.py
    └── moduleZ.py

moduleX.py 要導(dǎo)入 moduleY.py

# A:
from package.subpackage1 import moduleY
# B:
from . import moduleY

moduleX.py 要導(dǎo)入 moduleZ.py

# A:
from package.subpackage2 import moduleZ
# B:
from ..subpackage2 import moduleZ.py

從導(dǎo)入來(lái)看好處與壞處

A 好處/壞處,調(diào)整項(xiàng)目時(shí)容易發(fā)現(xiàn)import路徑的錯(cuò)誤/調(diào)整項(xiàng)目結(jié)構(gòu)的時(shí)候,import路徑需要經(jīng)常修改
B 好處/壞處,調(diào)整項(xiàng)目結(jié)構(gòu)的時(shí)候,有相對(duì)位置,不需要經(jīng)常調(diào)整/調(diào)整項(xiàng)目不宜發(fā)現(xiàn)導(dǎo)入的錯(cuò)誤,由于相對(duì)路徑的關(guān)系

踩坑提醒

引入相對(duì)路徑的坑注意
由于查找器的機(jī)制,除了內(nèi)置庫(kù),當(dāng)前目錄則是查找器的首選
若在main.py文件中有如下導(dǎo)入

import subpackage1.moduleX

在moduleX.py中又有如下相對(duì)引入

from ..subpackage2 import moduleZ 

執(zhí)行python main.py 的時(shí)候就會(huì)告訴你超了package的top-level
因?yàn)樵诋?dāng)前sys.path目錄下是看不到上層的package,且sys.path[0]是當(dāng)前執(zhí)行目錄,除非人為把package置為sys.path首位,不然就會(huì)出超top-level的錯(cuò)誤

最后編輯于
?著作權(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),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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