新聞中心
pkgutil —- 包擴展工具
源代碼: Lib/pkgutil.py

創(chuàng)新互聯(lián)為您提適合企業(yè)的網(wǎng)站設(shè)計?讓您的網(wǎng)站在搜索引擎具有高度排名,讓您的網(wǎng)站具備超強的網(wǎng)絡(luò)競爭力!結(jié)合企業(yè)自身,進行網(wǎng)站設(shè)計及把握,最后結(jié)合企業(yè)文化和具體宗旨等,才能創(chuàng)作出一份性化解決方案。從網(wǎng)站策劃到網(wǎng)站設(shè)計制作、做網(wǎng)站, 我們的網(wǎng)頁設(shè)計師為您提供的解決方案。
該模塊為導(dǎo)入系統(tǒng)提供了工具,尤其是在包支持方面。
class pkgutil.ModuleInfo(module_finder, name, ispkg)
一個包含模塊信息的簡短摘要的命名元組。
3.6 新版功能.
pkgutil.extend_path(path, name)
擴展組成包的模塊的搜索路徑。 預(yù)期用途是將以下代碼放到包的 __init__.py 中:
from pkgutil import extend_path__path__ = extend_path(__path__, __name__)
這將添加到包的 __path__ 所有在 sys.path 上以該包命名的目錄的子目錄。 這在想把一個邏輯包的不同部分作為多個目錄來分發(fā)時很有用處。
它還會查找開頭部分 * 與 name 參數(shù)相匹配的 *.pkg 文件。 此特性與 *.pth 文件類似(請參閱 site 模塊了解更多信息),區(qū)別在于它不會對以 import 開頭的行做特別對待。 將按外在值對 *.pkg 文件添加信任:除了檢查重復(fù)項,,所有在 *.pkg 文件中找到的條目都會被添加到路徑中,不管它們是否存在于文件系統(tǒng)中。 (這是特性而非缺陷。)
如果輸入路徑不是一個列表(已凍結(jié)包就是這種情況)則它將被原樣返回。 輸入路徑不會被修改;將返回一個擴展的副本。 條目將被添加到副本的末尾。
sys.path 會被假定為一個序列。 sys.path 中的條目如果不是指向現(xiàn)有目錄的字符串則會被忽略。 sys.path 上當用作文件名時會導(dǎo)致錯誤的 Unicode 條目可以會使得此函數(shù)引發(fā)異常(與 os.path.isdir() 的行為一致)。
class pkgutil.ImpImporter(dirname=None)
包裝了 python 的 “經(jīng)典” 導(dǎo)入算法的 PEP 302 查找器
如果 dirname 是一個字符串,將創(chuàng)建一個 PEP 302 查找器來搜索該目錄。 如果 dirname 為 None,則將創(chuàng)建一個 PEP 302 來搜索當前 sys.path,加上任何已凍結(jié)或內(nèi)置的模塊。
請注意 ImpImporter 目前并不支持放置在 sys.meta_path 上使用。
3.3 版后已移除: 這種模擬已不再必要,因為標準的導(dǎo)入機制現(xiàn)在完全兼容 PEP 302 并且在 importlib 中可用。
class pkgutil.ImpLoader(fullname, file, filename, etc)
包裝了 Python 的 “經(jīng)典” 導(dǎo)入算法的 加載器。
3.3 版后已移除: 這種模擬已不再必要,因為標準的導(dǎo)入機制現(xiàn)在完全兼容 PEP 302 并且在 importlib 中可用。
pkgutil.find_loader(fullname)
為給定的 fullname 獲取一個模塊 loader。
這是針對 importlib.util.find_spec() 的向下兼容包裝器,它將大多數(shù)失敗轉(zhuǎn)換為 ImportError 并且只返回加載器而不是完整的 ModuleSpec。
在 3.3 版更改: 更新為直接基于 importlib 而不是依賴于包內(nèi)部的 PEP 302 導(dǎo)入模擬。
在 3.4 版更改: 更新為基于 PEP 451
pkgutil.get_importer(path_item)
為給定的 path_item 獲取一個 finder。
返回的查找器如果是由一個路徑鉤子新建的則會被緩存至 sys.path_importer_cache。
如果需要重新掃描 sys.path_hooks 則緩存(或其一部分)可以被手動清空。
在 3.3 版更改: 更新為直接基于 importlib 而不是依賴于包內(nèi)部的 PEP 302 導(dǎo)入模擬。
pkgutil.get_loader(module_or_name)
為 module_or_name 獲取一個 loader。
如果模塊或包可通過正常導(dǎo)入機制來訪問,則會返回該機制相關(guān)部分的包裝器。 如果模塊無法找到或?qū)雱t返回 None。 如果指定的模塊尚未被導(dǎo)入,則包含它的包(如果存在)會被導(dǎo)入,以便建立包 __path__。
在 3.3 版更改: 更新為直接基于 importlib 而不是依賴于包內(nèi)部的 PEP 302 導(dǎo)入模擬。
在 3.4 版更改: 更新為基于 PEP 451
pkgutil.iter_importers(fullname=’’)
為給定的模塊名稱產(chǎn)生 finder 對象。
如果完整名稱包含一個 '.',查找器將針對包含該完整名稱的包,否則它們將被注冊為最高層級查找器(即同時用于 sys.meta_path 和 sys.path_hooks)。
如果指定的模塊位于一個包內(nèi),則該包會作為發(fā)起調(diào)用此函數(shù)的附帶影響被導(dǎo)入。
如果未指定模塊名稱,則會產(chǎn)生所有的最高層級查找器。
在 3.3 版更改: 更新為直接基于 importlib 而不是依賴于包內(nèi)部的 PEP 302 導(dǎo)入模擬。
pkgutil.iter_modules(path=None, prefix=’’)
為 path 上的所有子模塊產(chǎn)生 ModuleInfo,或者如果 path 為 None,則為 sys.path 上的所有最高層級模塊產(chǎn)生。
path 應(yīng)當為 None 或一個作為查找模塊目標的路徑的列表。
prefix 是要在輸出時輸出到每個模塊名稱之前的字符串。
備注
只適用于定義了 iter_modules() 方法的 finder。 該接口是非標準的,因此本模塊還提供了針對 importlib.machinery.FileFinder 和 zipimport.zipimporter 的實現(xiàn)。
在 3.3 版更改: 更新為直接基于 importlib 而不是依賴于包內(nèi)部的 PEP 302 導(dǎo)入模擬。
pkgutil.walk_packages(path=None, prefix=’’, onerror=None)
在 path 上遞歸地為所有模塊產(chǎn)生 ModuleInfo,或者如果 path 為 None,則為所有可訪問的模塊產(chǎn)生。
path 應(yīng)當為 None 或一個作為查找模塊目標的路徑的列表。
prefix 是要在輸出時輸出到每個模塊名稱之前的字符串。
請注意此函數(shù)必須導(dǎo)入給定 path 上所有的 packages (而不是 所有的模塊!),以便能訪問 __path__ 屬性來查找子模塊。
onerror 是在當試圖導(dǎo)入包如果發(fā)生任何異常則將附帶一個參數(shù)(被導(dǎo)入的包的名稱)被調(diào)用的函數(shù)。 如果沒有提供 onerror 函數(shù),則 ImportError 會被捕獲并被忽略,而其他異常則會被傳播,導(dǎo)致模塊搜索的終結(jié)。
示例:
# list all modules python can accesswalk_packages()# list all submodules of ctypeswalk_packages(ctypes.__path__, ctypes.__name__ + '.')
備注
只適用于定義了 iter_modules() 方法的 finder。 該接口是非標準的,因此本模塊還提供了針對 importlib.machinery.FileFinder 和 zipimport.zipimporter 的實現(xiàn)。
在 3.3 版更改: 更新為直接基于 importlib 而不是依賴于包內(nèi)部的 PEP 302 導(dǎo)入模擬。
pkgutil.get_data(package, resource)
從包中獲取一個資源。
這是一個針對 loader get_data API 的包裝器。 package 參數(shù)應(yīng)為一個標準模塊格式 (foo.bar) 的包名稱。 resource 參數(shù)應(yīng)為相對路徑文件名的形式,使用 / 作為路徑分隔符。 父目錄名 ..,以及根目錄名 (以 / 打頭) 均不允許使用。
返回指定資源內(nèi)容的二進制串。
對于位于文件系統(tǒng)中,已經(jīng)被導(dǎo)入的包來說,這大致等價于:
d = os.path.dirname(sys.modules[package].__file__)data = open(os.path.join(d, resource), 'rb').read()
如果指定的包無法被定位或加載,或者如果它使用了不支持 get_data 的 loader,則將返回 None。 特別地,針對 命名空間包 的 loader 不支持 get_data。
pkgutil.resolve_name(name)
將一個名稱解析為對象。
此功能被用在標準庫的許多地方 (參見 bpo-12915) —— 并且等價的功能也被廣泛用于第三方包例如 setuptools, Django 和 Pyramid。
預(yù)期 name 將為以下格式之一,其中 W 是一個有效的 Python 標識符的縮寫而點號表示這些偽正則表達式中的句點字面值:
-
W(.W)* -
W(.W)*:(W(.W)*)?
第一種形式只是為了保持向下兼容性。 它假定帶點號名稱的某一部分是包,而其余部分則是該包內(nèi)部的一個對象,并可能嵌套在其他對象之內(nèi)。 因為包和對象層級結(jié)構(gòu)之間的分界點無法通過觀察來確定,所以使用這種形式必須重復(fù)嘗試導(dǎo)入。
在第二種形式中,調(diào)用方通過提供一個單獨冒號來明確分界點:冒號左邊的帶點號名稱是要導(dǎo)入的包,而冒號右邊的帶點號名稱則是對象層級結(jié)構(gòu)。 使用這種形式只需要導(dǎo)入一次。 如果它以冒號結(jié)尾,則將返回一個模塊對象。
此函數(shù)將返回一個對象(可能為模塊),或是引發(fā)下列異常之一:
ValueError — 如果 name 不為可識別的格式。
ImportError — 如果導(dǎo)入本應(yīng)成功但卻失敗。
AttributeError — 當在遍歷所導(dǎo)入包的對象層級結(jié)構(gòu)以獲取想要的對象時遭遇失敗。
3.9 新版功能.
當前文章:創(chuàng)新互聯(lián)Python教程:pkgutil—-包擴展工具
本文鏈接:http://fisionsoft.com.cn/article/djiieji.html


咨詢
建站咨詢
