詳解Python中的from..import絕對(duì)導(dǎo)入語句
相對(duì)或者絕對(duì)import
更多的復(fù)雜部分已經(jīng)從python2.5以來實(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è)包稱為 pkg 包含 pkg.main 和pkg.string 兩個(gè)子模塊??紤]在‘main.py'中的代碼,什么事情會(huì)發(fā)生如果我們執(zhí)行語句 import string 在python2.4或者更早的版本?他將會(huì)查詢包的目錄執(zhí)行一個(gè)相對(duì)的import,找到pkg/string.py ,導(dǎo)入文件的內(nèi)容作為pkg.string模塊,這個(gè)模塊的邊界的名字是'string'在pkg.main模塊中的名稱空間。
如果pkg.string是你想要的這個(gè)非常不錯(cuò)。但是如果你僅僅想要的是python的基本的string模塊?
沒有清楚的方法忽略pkg.string以及尋找基本的模塊;一般情況下你不得不去查看sys.modules中的內(nèi)容,那有一點(diǎn)稍微的不清楚。Holger Krekel的py.std包提供了一個(gè)整齊的方法執(zhí)行從基本庫中導(dǎo)入的方法,improt py;py.std.string.jion(),但是那個(gè)包在python的安裝過程是是不可用的。
閱讀代碼在相對(duì)導(dǎo)入方面也是不夠清晰的,因?yàn)樽x者可能混淆string和pkg.string模塊使用。Python用戶可以馬上知道那是不同的名稱在基本庫和自己的包模塊之間,但是你不能保護(hù)你自己的子模塊名字在一個(gè)新版本的python中。
從python2.5,你可以打開 import的行為直接去絕對(duì)導(dǎo)入使用一個(gè) from __future__ import absolute_import 。這個(gè)絕對(duì)導(dǎo)入行為將成為一個(gè)默認(rèn)的細(xì)節(jié)在將來的python中。一旦絕對(duì)導(dǎo)入被默認(rèn),import string 將總是尋找基本庫。建議用戶盡可能多的使用絕對(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是連著的,中間沒有空格
.代表當(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中from module import * 的一個(gè)坑
- python中import,from……import的使用詳解
- Python上級(jí)目錄文件導(dǎo)入的幾種方法(from.import)
- python中import和from-import的區(qū)別解析
- python中的import、from import及import as的區(qū)別解析
- python3中_from...import...與import?...之間的區(qū)別詳解(包/模塊)
- Python import與from import使用和區(qū)別解讀
- python中import與from方法總結(jié)(推薦)
- Python中from…import *和import區(qū)別小結(jié)
相關(guān)文章
Python numpy實(shí)現(xiàn)二維數(shù)組和一維數(shù)組拼接的方法
今天小編就為大家分享一篇Python numpy實(shí)現(xiàn)二維數(shù)組和一維數(shù)組拼接的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-06-06
Python 隨機(jī)生成測(cè)試數(shù)據(jù)的模塊:faker基本使用方法詳解
這篇文章主要介紹了Python 隨機(jī)生成測(cè)試數(shù)據(jù)的模塊:faker基本使用方法,結(jié)合實(shí)例形式詳細(xì)分析了Python 隨機(jī)生成測(cè)試數(shù)據(jù)的模塊faker基本功能、原理、使用方法及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04
Python爬蟲實(shí)現(xiàn)vip電影下載的示例代碼
這篇文章主要介紹了Python爬蟲實(shí)現(xiàn)vip電影下載的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
python啟動(dòng)應(yīng)用程序和終止應(yīng)用程序的方法
今天小編就為大家分享一篇python啟動(dòng)應(yīng)用程序和終止應(yīng)用程序的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-06-06
Python推導(dǎo)式簡(jiǎn)單示例【列表推導(dǎo)式、字典推導(dǎo)式與集合推導(dǎo)式】
這篇文章主要介紹了Python推導(dǎo)式,結(jié)合簡(jiǎn)單實(shí)例形式分析了Python列表推導(dǎo)式、字典推導(dǎo)式與集合推導(dǎo)式基本使用方法,需要的朋友可以參考下2018-12-12
python常用操作之使用多個(gè)界定符(分隔符)分割字符串的方法實(shí)例
在使用Python處理字符串的時(shí)候,有時(shí)候會(huì)需要分割字符,下面這篇文章主要給大家介紹了關(guān)于python常用操作之使用多個(gè)界定符(分隔符)分割字符串的相關(guān)資料,文中通過圖文以及實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01

