注:如果允許,不要使用相對路徑導入,很容易出錯,特別是對新手而言。使用絕對路徑導入,并將包放在sys.path的某個路徑下就可以。
假設現在有如下目錄結構:
$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模塊文件中想要導入dir1.dir3.b2模塊,可以在a1.py中使用下面兩種方式導入:
importdir1.dir3.b2
fromdir1.dir2.importb2
上面的導入方式是使用絕對路徑進行導入的,只要使用絕對路徑,都是從sys.path開始搜索的。例如,上面是從sys.path下搜索dir1,再依次搜索dir1.dir3.b2。
python還支持包的相對路徑的導入,只要使用.或..即可,就像操作系統上的相對路徑一樣。使用相對路徑導入時不會搜索sys.path。
相對路徑導入方式只有from...import支持,import語句不支持,且只有使用.或..的才算是相對路徑,否則就是絕對路徑,就會從sys.path下搜索。
例如,在a1.py中導入dir1.dir3.b2:
from..dir3importb2
注意,必須不能直接pythona1.py執行這個文件,這樣會報錯:
from..dir3importb2
ValueError:attemptedrelativeimportbeyondtop-levelpackage
報錯原因稍后解釋。現在在交互式模式下導入,或者使用python-mdir1.dir2.a1的方式執行。
>>>importdir1.dir2.a1
以下幾個示例都如此測試。
在a1.py中導入包dir3:
from..importdir3
在a1.py中導入dir1.dir2.a2,也就是同目錄下的a2.py:
from.importa2
導入模塊的屬性,如變量x:
from..dir3.b2importx
from.a2importx
以上內容為大家介紹了Python相對路徑導入,希望對大家有所幫助,如果想要了解更多Python相關知識,請關注IT培訓機構:千鋒教育。