注:如果允許,不要使用相對(duì)路徑導(dǎo)入,很容易出錯(cuò),特別是對(duì)新手而言。使用絕對(duì)路徑導(dǎo)入,并將包放在sys.path的某個(gè)路徑下就可以。
假設(shè)現(xiàn)在有如下目錄結(jié)構(gòu):
$tree-fd:\pypath
d:\pypath
└──dir1
├──__init__.py
├──dir4
│├──__init__.py
│├──c2.py
│└──c1.py
├──dir3
│├──__init__.py
│├──b3.py
│├──b2.py
│└──b1.py
└──dir2
├──__init__.py
├──a4.py
├──a3.py
├──a2.py
└──a1.py
在dir1.dir2.a1模塊文件中想要導(dǎo)入dir1.dir3.b2模塊,可以在a1.py中使用下面兩種方式導(dǎo)入:
importdir1.dir3.b2
fromdir1.dir2.importb2
上面的導(dǎo)入方式是使用絕對(duì)路徑進(jìn)行導(dǎo)入的,只要使用絕對(duì)路徑,都是從sys.path開始搜索的。例如,上面是從sys.path下搜索dir1,再依次搜索dir1.dir3.b2。
python還支持包的相對(duì)路徑的導(dǎo)入,只要使用.或..即可,就像操作系統(tǒng)上的相對(duì)路徑一樣。使用相對(duì)路徑導(dǎo)入時(shí)不會(huì)搜索sys.path。
相對(duì)路徑導(dǎo)入方式只有from...import支持,import語(yǔ)句不支持,且只有使用.或..的才算是相對(duì)路徑,否則就是絕對(duì)路徑,就會(huì)從sys.path下搜索。
例如,在a1.py中導(dǎo)入dir1.dir3.b2:
from..dir3importb2
注意,必須不能直接pythona1.py執(zhí)行這個(gè)文件,這樣會(huì)報(bào)錯(cuò):
from..dir3importb2
ValueError:attemptedrelativeimportbeyondtop-levelpackage
報(bào)錯(cuò)原因稍后解釋?,F(xiàn)在在交互式模式下導(dǎo)入,或者使用python-mdir1.dir2.a1的方式執(zhí)行。
>>>importdir1.dir2.a1
以下幾個(gè)示例都如此測(cè)試。
在a1.py中導(dǎo)入包dir3:
from..importdir3
在a1.py中導(dǎo)入dir1.dir2.a2,也就是同目錄下的a2.py:
from.importa2
導(dǎo)入模塊的屬性,如變量x:
from..dir3.b2importx
from.a2importx
以上內(nèi)容為大家介紹了Python相對(duì)路徑導(dǎo)入,希望對(duì)大家有所幫助,如果想要了解更多Python相關(guān)知識(shí),請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。