在python的執行檔案或模組中,使用類似import 模組名
、import 包名.模組名
、
from 包名.模組名 import 內容
等匯入語法時,就是在用絕對路徑匯入模組。
執行絕對匯入時的模組搜尋順序:
執行檔案所在的目錄(執行檔案可以理解為入口指令碼,或者main函式所在的指令碼。)
pythonpath的環境變數裡的路徑
如果都找不到,python會察看預設路徑,在python安裝時已經配置好。
虛擬環境中的第三方包路徑。
簡而言之,使用絕對匯入,python會:使用相對匯入,就不需要考慮執行檔案到底是誰了,只需要知道模組與模組之間的相對位置。先從記憶體找,
再從sys.path中找,sys.path是乙個列表,儲存了上述的1-4的所有絕對路徑。
一定要分清楚誰是執行檔案,誰是被匯入檔案。
語法:
from
.import module # 匯入當前目錄下的module
from..
import module # 匯入上一級目錄下的module
from..
.import module # 匯入爺爺目錄下的module
from
.module import content # 匯入當前目錄下模組的內容
from
..dir1.module import content # 匯入父級目錄下的dir1目錄下的模組中的內容
from
..dir1.dir2 import module # 匯入父級目錄下的dir1目錄下的dir2目錄下的模組..
.
相對匯入的語法很強大,但是需要注意的是:相對匯入不能在執行檔案中使用,只能在被匯入的模組中使用。
根據相對路徑的查詢過程中的目錄不一定得是乙個python包,可以是乙個普通目錄。
但是,頂級包之間不能互相訪問——與執行檔案處於乙個目錄下的包是頂級包。
例如目錄結構:
執行main.py,即main.py所在目錄下的a包和b包是頂級包,不能互相訪問,所以a.py不能匯入b包中的b.py。
如果出現頂級包之間的互相訪問,python直譯器會報錯:
valueerror: attempted relative import beyond top-level package
不得已的方法:
實在是想實現頂級包之間的相互訪問,就需要向sys.path新增目標模組所在的目錄,再使用絕對匯入來載入目標模組。
參考文章
Python中的絕對匯入和相對匯入
如果你做過有多個檔案的python專案,那麼你一定用過import語句。即使是對於有多個專案的python支持者來說,import也會讓人困惑!你可能正閱讀本文,因為希望更深入地了解python中的匯入,尤其是絕對和相對匯入。在本教程中,你將了解兩者之間的差異,以及它們的利弊。我們立即開始吧!你需要...
python 絕對匯入和相對匯入
今天在import自定義模組時遇到問題,在此記錄一下。假設檔案結構如下 project main.py utils a.py b.py 我想要實現乙個順序匯入main a b,即 main.py from utils import a a.py import b 然而在a.py報錯找不到b模組。因為...
python包的相對匯入和絕對匯入
絕對匯入 從要匯入檔案的頂級包開始寫起 print package 列印出該檔案所在包的路徑以下面所示專案檔案結構為例 頂級包一般是專案資料夾中最上層的包,比如說a,b中的模組的頂級包就分別是a,b a1中 print package a b1中 print package b bb1中 print...