python模組中的絕對匯入和相對匯入

2021-10-09 07:51:16 字數 1769 閱讀 4994

在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...