詳解Python中的from..import絕對導(dǎo)入語句
相對或者絕對import
更多的復(fù)雜部分已經(jīng)從python2.5以來實現(xiàn):導(dǎo)入一個模塊可以指定使用絕對或者包相對的導(dǎo)入。這個計劃將移動到使絕對的導(dǎo)入成為默認的細節(jié)在其他版本的python中。
我們假設(shè)你有一個包目錄,像下面這樣:
pkg/ pkg/__init__.py pkg/main.py pkg/string.py
上面定義了一個包稱為 pkg 包含 pkg.main 和pkg.string 兩個子模塊??紤]在‘main.py'中的代碼,什么事情會發(fā)生如果我們執(zhí)行語句 import string 在python2.4或者更早的版本?他將會查詢包的目錄執(zhí)行一個相對的import,找到pkg/string.py ,導(dǎo)入文件的內(nèi)容作為pkg.string模塊,這個模塊的邊界的名字是'string'在pkg.main模塊中的名稱空間。
如果pkg.string是你想要的這個非常不錯。但是如果你僅僅想要的是python的基本的string模塊?
沒有清楚的方法忽略pkg.string以及尋找基本的模塊;一般情況下你不得不去查看sys.modules中的內(nèi)容,那有一點稍微的不清楚。Holger Krekel的py.std包提供了一個整齊的方法執(zhí)行從基本庫中導(dǎo)入的方法,improt py;py.std.string.jion(),但是那個包在python的安裝過程是是不可用的。
閱讀代碼在相對導(dǎo)入方面也是不夠清晰的,因為讀者可能混淆string和pkg.string模塊使用。Python用戶可以馬上知道那是不同的名稱在基本庫和自己的包模塊之間,但是你不能保護你自己的子模塊名字在一個新版本的python中。
從python2.5,你可以打開 import的行為直接去絕對導(dǎo)入使用一個 from __future__ import absolute_import 。這個絕對導(dǎo)入行為將成為一個默認的細節(jié)在將來的python中。一旦絕對導(dǎo)入被默認,import string 將總是尋找基本庫。建議用戶盡可能多的使用絕對導(dǎo)入,因此在你的代碼中使用from pkg improt string是適宜的。在python2.*版本中需要:
from __future__ import absolute_import
示例1:
例如:在模塊A.B.C中的代碼:
from . import D # 導(dǎo)入A.B.D from .. import E # 導(dǎo)入A.E from ..F import G # 導(dǎo)入A.F.G,.. 和 F是連著的,中間沒有空格
.代表當前目錄,..代表上一層目錄,...代表上上層目錄。
示例2:
目錄結(jié)構(gòu):
package/ __init__.py subpackage1/ __init__.py moduleX.py moduleY.py subpackage2/ __init__.py moduleZ.py moduleA.py
在subpackage1/moduleX.py 或者 subpackage1/__init__.py中可以這樣導(dǎo)入module:
from .moduleY import spam from .moduleY import spam as ham from . import moduleY from ..subpackage1 import moduleY from ..subpackage2.moduleZ import eggs from ..moduleA import foo from ...package import bar from ...sys import path
注意,from ...sys import path是合法的,但是不建議。直接from sys import path就行了。
相關(guān)文章
Python提取PDF內(nèi)容的方法(文本、圖像、線條等)
這篇文章主要介紹了Python提取PDF內(nèi)容的方法(文本、圖像、線條等),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09pandas進行數(shù)據(jù)的交集與并集方式的數(shù)據(jù)合并方法
今天小編就為大家分享一篇pandas進行數(shù)據(jù)的交集與并集方式的數(shù)據(jù)合并方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06詳解sklearn?Preprocessing?數(shù)據(jù)預(yù)處理功能
這篇文章主要介紹了sklearn?Preprocessing?數(shù)據(jù)預(yù)處理功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-08-08Python學(xué)習(xí)筆記之視頻人臉檢測識別實例教程
這篇文章主要給大家介紹了關(guān)于Python學(xué)習(xí)筆記之視頻人臉檢測識別的相關(guān)資料,文中通過示例代碼以及圖文介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03