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

絕對導入:從要導入文件的頂級包開始寫起

print(__package__)  # 打印出該文件所在包的路徑

以下面所示項目文件結構爲例:

# ​​頂級包一般是項目文件夾中最上層的包,比如說a,b中的模塊的頂級包就分別是a,b
# a1中
print(__package__)  >>  a

# b1中
print(__package__)  >>  b

# bb1中 
print(__package__)  >>  b.bb  # 則 bb1 的頂級包就是b

# csdn中
print(__package__)  >>  None  # 該模塊(.py文件)直接在項目文件夾下,無頂級包,所以一般都是將入口文件放在項目文件夾下,最外層一般不相互調用
# 絕對調用時
form b.bb import bb1  # 調用bb1

相對導入: 

.  # 當前包
..  # 上一級包
...  # 上上一級
# 在b1中導入b2
form . import b2

# 在bb1中導入b1
from .. import b1

注意:

1. 入口文件(即運行開始的文件)不可使用相對導入

# 運行a2.py相對調用同級的a1.py
from . import a1

錯誤原因:入口文件在編譯時會被python自動命名成__main__,你是找不到 . 作爲本級文件夾的

2. 絕對導入一定要從頂級包開始

我一般都直接採用頂級調用(包內文件層級較少的情況,而且我喜歡在模塊中寫一個自己的驗證程序,所以相對調用老是報1.的錯)

包內文件不作入口文件使用的話,完全可以在包內調用寫相對調用,比較簡潔方便

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章