python學習——搞懂import

首先區分兩個概念,mudule(模塊)和package(包),通俗一點來說:【參考】

  • 一個 .py 文件就是個 module
  • package(包)是一個包含__init__.py 文件的目錄,該目錄下一定得有這個__init__.py文件和其它模塊或子包。

如果想要import module,方法是:

import xxx  # 直接導入
import xxx as xx  # 重命名
from xxx import y1, y2 # 部分導入

如果想要import 某一個指定路徑下的指定module(模塊),這裏分幾種情況討論:

  1. 如果想要import的module在當前系統路徑的子路徑中,可以直接索引進去import
  2. 如果想要import的module在父目錄中,是不可以直接被import的,會報錯 can’t import top level module之類的錯誤。這時候需要將父目錄加到sys.path中去。

舉個栗子,假設目錄結構爲:

main.py
model
	__init__.py
	backbone.py
	utils
		__init__.py
		model_a.py
		model_b.py
  • 如果我們當前的執行路徑處於main.py層級,想要import backbone模塊,而backbone.py裏面又import了model_a和model_b模塊,這時候main.py應該寫成:
import model.backbone
from model.backbone import xxx

backbone.py應該寫成:(在python3.6中,utils前不加點會報錯)

from .utils.model_a import *
from .utils.model_b import *

上面的例子中,兩級目錄下的__init__.py文件都是空的,當然也可以好好利用這個__init__.py文件,因爲package被導入時,init.py有且僅有一次執行機會,所以可以在這裏對該目錄下的module進行一下統一的管理和重命名等操作,方便後續的調用。

  • 如果我們當前的執行路徑處於model_a.py層級,想要調用父目錄下的backbone模塊,直接import backbone會報錯,需要將父目錄加入sys.path纔可以,在model_a.py中寫:
import sys
sys.path.insert(0, '..')
import backbone

這樣就不會報錯了。

參考1

發佈了162 篇原創文章 · 獲贊 67 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章