詳解Python中的from..import絕對(duì)導(dǎo)入語(yǔ)句
相對(duì)或者絕對(duì)import
更多的復(fù)雜部分已經(jīng)從python2.5以來(lái)實(shí)現(xiàn):導(dǎo)入一個(gè)模塊可以指定使用絕對(duì)或者包相對(duì)的導(dǎo)入。這個(gè)計(jì)劃將移動(dòng)到使絕對(duì)的導(dǎo)入成為默認(rèn)的細(xì)節(jié)在其他版本的python中。
我們假設(shè)你有一個(gè)包目錄,像下面這樣:
pkg/ pkg/__init__.py pkg/main.py pkg/string.py
上面定義了一個(gè)包稱(chēng)為 pkg 包含 pkg.main 和pkg.string 兩個(gè)子模塊??紤]在‘main.py'中的代碼,什么事情會(huì)發(fā)生如果我們執(zhí)行語(yǔ)句 import string 在python2.4或者更早的版本?他將會(huì)查詢(xún)包的目錄執(zhí)行一個(gè)相對(duì)的import,找到pkg/string.py ,導(dǎo)入文件的內(nèi)容作為pkg.string模塊,這個(gè)模塊的邊界的名字是'string'在pkg.main模塊中的名稱(chēng)空間。
如果pkg.string是你想要的這個(gè)非常不錯(cuò)。但是如果你僅僅想要的是python的基本的string模塊?
沒(méi)有清楚的方法忽略pkg.string以及尋找基本的模塊;一般情況下你不得不去查看sys.modules中的內(nèi)容,那有一點(diǎn)稍微的不清楚。Holger Krekel的py.std包提供了一個(gè)整齊的方法執(zhí)行從基本庫(kù)中導(dǎo)入的方法,improt py;py.std.string.jion(),但是那個(gè)包在python的安裝過(guò)程是是不可用的。
閱讀代碼在相對(duì)導(dǎo)入方面也是不夠清晰的,因?yàn)樽x者可能混淆string和pkg.string模塊使用。Python用戶(hù)可以馬上知道那是不同的名稱(chēng)在基本庫(kù)和自己的包模塊之間,但是你不能保護(hù)你自己的子模塊名字在一個(gè)新版本的python中。
從python2.5,你可以打開(kāi) import的行為直接去絕對(duì)導(dǎo)入使用一個(gè) from __future__ import absolute_import 。這個(gè)絕對(duì)導(dǎo)入行為將成為一個(gè)默認(rèn)的細(xì)節(jié)在將來(lái)的python中。一旦絕對(duì)導(dǎo)入被默認(rèn),import string 將總是尋找基本庫(kù)。建議用戶(hù)盡可能多的使用絕對(duì)導(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是連著的,中間沒(méi)有空格
.代表當(dāng)前目錄,..代表上一層目錄,...代表上上層目錄。
示例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就行了。
- python中的import語(yǔ)句用法大全
- Python 完美解決 Import “模塊“ could not be resolved ...的問(wèn)題
- Python?from?import導(dǎo)包ModuleNotFoundError?No?module?named找不到模塊問(wèn)題解決
- python中關(guān)于py文件之間相互import的問(wèn)題及解決方法
- python?import模塊時(shí)有錯(cuò)誤紅線(xiàn)的原因
- Python import自己的模塊報(bào)錯(cuò)問(wèn)題及解決
- Python中import語(yǔ)句用法案例講解
相關(guān)文章
Python提取PDF內(nèi)容的方法(文本、圖像、線(xiàn)條等)
這篇文章主要介紹了Python提取PDF內(nèi)容的方法(文本、圖像、線(xiàn)條等),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09pandas進(jìn)行數(shù)據(jù)的交集與并集方式的數(shù)據(jù)合并方法
今天小編就為大家分享一篇pandas進(jìn)行數(shù)據(jù)的交集與并集方式的數(shù)據(jù)合并方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06詳解sklearn?Preprocessing?數(shù)據(jù)預(yù)處理功能
這篇文章主要介紹了sklearn?Preprocessing?數(shù)據(jù)預(yù)處理功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08Python 調(diào)用C++封裝的進(jìn)一步探索交流
這篇文章主要介紹了Python 調(diào)用C++封裝的進(jìn)一步探索交流,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03Python學(xué)習(xí)筆記之視頻人臉檢測(cè)識(shí)別實(shí)例教程
這篇文章主要給大家介紹了關(guān)于Python學(xué)習(xí)筆記之視頻人臉檢測(cè)識(shí)別的相關(guān)資料,文中通過(guò)示例代碼以及圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03用Python實(shí)現(xiàn)QQ游戲大家來(lái)找茬輔助工具
這是一個(gè)用于QQ大家來(lái)找茬(美女找茬)的輔助外掛,開(kāi)發(fā)的原因是看到老爸天天在玩這個(gè)游戲,分?jǐn)?shù)是慘不忍睹的負(fù)4000多。本來(lái)是想寫(xiě)個(gè)很簡(jiǎn)單的東西,但由于過(guò)程中老爸的多次嘲諷,逼得我不得不盡力完善,最后形成了一個(gè)小小的產(chǎn)品。2014-09-09