相對匯入與絕對匯入

2022-07-01 00:51:14 字數 1334 閱讀 4774

1.cd.. 回退到上一層 cd../.. 回退兩層

2.from . import module(模組名) 

點表示在同一級目錄。可以直接相對匯入。

3.資料夾被python直譯器視為package需要同時滿足兩個條件:

①·資料夾中必須有__init__檔案,檔案可以為空,但必須存在。

②·不能作為頂層模組來執行該資料夾中的py檔案(即不能作為主函式的入口)

4.跨模組匯入補充

建立的目錄和包

manage模組

crm模組匯入到manage裡,

crm5.絕對匯入和相對匯入

絕對匯入:from a import b 或者直接import b

相對匯入:from . import b 或者 from ..a import b

python是根據__name__來決定乙個模組在包中的結構的。如果__name__是 __main__則他本身是頂層模組,沒有包結構。

如果是a.b.c 結構,則a是頂層模組。

基本上遵循下面的原則:

如果是絕對匯入,乙個模組只能匯入自身的子模組或和它的頂層模組同級別的模組及其子模組

如果是相對匯入,乙個模組必須有包結構且只能匯入它的頂層模組內部的模組。

如果乙個模組被直接執行,則他自己為頂層模組,不存在相對路徑。

相對匯入可以避免硬編碼,對於包的維護是友好的。絕對匯入可以避免與標準庫命名的衝突,實際上也不推薦自定義模組與標準庫命令相同。

相對匯入與絕對匯入僅用於包內部(包內匯入即是包內的模組匯入到包內的模組)

絕對匯入是直接跳過包內,直接搜尋sys·path,在sys·path裡進行搜尋。

相對匯入是先在包內,再在包外搜尋。

sys.modules  生成乙個字典,檢視當前存在的模組。也可以檢查匯入的模組是否匯入成功。

6.在當前的包內不能用相對匯入是因為需要執行的模組python會預設他是乙個頂層模組。

用 __name__檢視當前函式的型別,顯示為main,主函式。

from . import crm

crm.sayhi()

import sys

print(__name__)

# from . import crm

# importerror: cannot import name 'crm'

# __main__

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之絕對匯入和相對匯入

這兩個概念是相對於包內匯入而言的。包內匯入即是包內的模組匯入包內部的模組。當前資料夾下 環境變數pythonpaht中 sys.path中 匯入當前模組同級別的模組 匯入當前模組同級別包中的模組 不能匯入具體的 變數 函式 型別 import匯入 sub package init py tools....

python包的相對匯入和絕對匯入

絕對匯入 從要匯入檔案的頂級包開始寫起 print package 列印出該檔案所在包的路徑以下面所示專案檔案結構為例 頂級包一般是專案資料夾中最上層的包,比如說a,b中的模組的頂級包就分別是a,b a1中 print package a b1中 print package b bb1中 print...