新聞中心
導(dǎo)入模塊
PyObject *PyImport_ImportModule(const char *name)

創(chuàng)新互聯(lián)公司2013年至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站制作、網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元英山做網(wǎng)站,已為上家服務(wù),為英山各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792
Return value: New reference. Part of the Stable ABI.
這是下面 PyImport_ImportModuleEx() 的簡(jiǎn)化版接口,將 globals 和 locals 參數(shù)設(shè)為 NULL 并將 level 設(shè)為 0。 當(dāng) name 參數(shù)包含一個(gè)點(diǎn)號(hào)(即指定了一個(gè)包的子模塊)時(shí),fromlist 參數(shù)會(huì)被設(shè)為列表 ['*'] 這樣返回值將為所指定的模塊而不像在其他情況下那樣為包含模塊的最高層級(jí)包。 (不幸的是,這在 name 實(shí)際上是指定一個(gè)子包而非子模塊時(shí)將有一個(gè)額外的副作用:在包的 __all__ 變量中指定的子模塊會(huì)被加載。) 返回一個(gè)對(duì)所導(dǎo)入模塊的新引用,或是在導(dǎo)入失敗時(shí)返回 NULL 并設(shè)置一個(gè)異常。 模塊導(dǎo)入失敗同模塊不會(huì)留 在 sys.modules 中。
該函數(shù)總是使用絕對(duì)路徑導(dǎo)入。
PyObject *PyImport_ImportModuleNoBlock(const char *name)
Return value: New reference. Part of the Stable ABI.
該函數(shù)是 PyImport_ImportModule() 的一個(gè)被遺棄的別名。
在 3.3 版更改: 在導(dǎo)入鎖被另一線程掌控時(shí)此函數(shù)會(huì)立即失敗。 但是從 python 3.3 起,鎖方案在大多數(shù)情況下都已切換為針對(duì)每個(gè)模塊加鎖,所以此函數(shù)的特殊行為已無必要。
PyObject *PyImport_ImportModuleEx(const char *name, PyObject *globals, PyObject *locals, PyObject *fromlist)
Return value: New reference.
導(dǎo)入一個(gè)模塊。 請(qǐng)參閱內(nèi)置 Python 函數(shù) __import__() 獲取完善的相關(guān)描述。
返回值是一個(gè)對(duì)所導(dǎo)入模塊或最高層級(jí)包的新引用,或是在導(dǎo)入失敗時(shí)則為 NULL 并設(shè)置一個(gè)異常。 與 __import__() 類似,當(dāng)請(qǐng)求一個(gè)包的子模塊時(shí)返回值通常為該最高層級(jí)包,除非給出了一個(gè)非空的 fromlist。
導(dǎo)入失敗將移動(dòng)不完整的模塊對(duì)象,就像 PyImport_ImportModule() 那樣。
PyObject *PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals, PyObject *locals, PyObject *fromlist, int level)
Return value: New reference. Part of the Stable ABI since version 3.7.
導(dǎo)入一個(gè)模塊。 關(guān)于此函數(shù)的最佳說明請(qǐng)參考內(nèi)置 Python 函數(shù) __import__(),因?yàn)闃?biāo)準(zhǔn) __import__() 函數(shù)會(huì)直接調(diào)用此函數(shù)。
返回值是一個(gè)對(duì)所導(dǎo)入模塊或最高層級(jí)包的新引用,或是在導(dǎo)入失敗時(shí)則為 NULL 并設(shè)置一個(gè)異常。 與 __import__() 類似,當(dāng)請(qǐng)求一個(gè)包的子模塊時(shí)返回值通常為該最高層級(jí)包,除非給出了一個(gè)非空的 fromlist。
3.3 新版功能.
PyObject *PyImport_ImportModuleLevel(const char *name, PyObject *globals, PyObject *locals, PyObject *fromlist, int level)
Return value: New reference. Part of the Stable ABI.
類似于 PyImport_ImportModuleLevelObject(),但其名稱為 UTF-8 編碼的字符串而不是 Unicode 對(duì)象。
在 3.3 版更改: 不再接受 level 為負(fù)數(shù)值。
PyObject *PyImport_Import(PyObject *name)
Return value: New reference. Part of the Stable ABI.
這是一個(gè)調(diào)用了當(dāng)前“導(dǎo)入鉤子函數(shù)”的更高層級(jí)接口(顯式指定 level 為 0,表示絕對(duì)導(dǎo)入)。 它將發(fā)起調(diào)用當(dāng)前全局作用域下 __builtins__ 中的 __import__() 函數(shù)。 這意味著將使用當(dāng)前環(huán)境下安裝的任何導(dǎo)入鉤子來完成導(dǎo)入。
該函數(shù)總是使用絕對(duì)路徑導(dǎo)入。
PyObject *PyImport_ReloadModule(PyObject *m)
Return value: New reference. Part of the Stable ABI.
重載一個(gè)模塊。 返回一個(gè)指向被重載模塊的新引用,或者在失敗時(shí)返回 NULL 并設(shè)置一個(gè)異常(在此情況下模塊仍然會(huì)存在)。
PyObject *PyImport_AddModuleObject(PyObject *name)
Return value: Borrowed reference. Part of the Stable ABI since version 3.7.
返回對(duì)應(yīng)于某個(gè)模塊名稱的模塊對(duì)象。 name 參數(shù)的形式可以為 package.module。 如果存在 modules 字典則首先檢查該字典,如果找不到,則創(chuàng)建一個(gè)新模塊并將其插入到 modules 字典。 在失敗時(shí)返回 NULL 并設(shè)置一個(gè)異常。
備注
此函數(shù)不會(huì)加載或?qū)胫付K;如果模塊還未被加載,你將得到一個(gè)空的模塊對(duì)象。 請(qǐng)使用 PyImport_ImportModule() 或它的某個(gè)變體形式來導(dǎo)入模塊。 name 使用帶點(diǎn)號(hào)名稱的包結(jié)構(gòu)如果尚不存在則不會(huì)被創(chuàng)建。
3.3 新版功能.
PyObject *PyImport_AddModule(const char *name)
Return value: Borrowed reference. Part of the Stable ABI.
類似于 PyImport_AddModuleObject(),但其名稱為 UTF-8 編碼的字符串而不是 Unicode 對(duì)象。object.
PyObject *PyImport_ExecCodeModule(const char *name, PyObject *co)
Return value: New reference. Part of the Stable ABI.
給定一個(gè)模塊名稱(可能為 package.module 形式)和一個(gè)從 Pyhon 字節(jié)碼文件讀取或從內(nèi)置函數(shù) compile() 獲取的代碼對(duì)象,加載該模塊。 返回對(duì)該模塊對(duì)象的新引用,或者如果發(fā)生錯(cuò)誤則返回 NULL 并設(shè)置一個(gè)異常。 在發(fā)生錯(cuò)誤的情況下 name 會(huì)從 sys.modules 中被移除,即使 name 在進(jìn)入 PyImport_ExecCodeModule() 時(shí)已存在于 sys.modules 中。 在 sys.modules 中保留未完全初始化的模塊是危險(xiǎn)的,因?yàn)閷?dǎo)入這樣的模塊沒有辦法知道模塊對(duì)象是否處于一種未知的(對(duì)于模塊作業(yè)的意圖來說可能是已損壞的)狀態(tài)。
模塊的 __spec__ 和 __loader__ 如果尚未設(shè)置的話,將被設(shè)置為適當(dāng)?shù)闹怠?相應(yīng) spec 的加載器(如果已設(shè)置)將被設(shè)為模塊的 __loader__ 而在其他情況下設(shè)為 SourceFileLoader 的實(shí)例。
模塊的 __file__ 屬性將被設(shè)為代碼對(duì)象的 co_filename。 如果適用,__cached__ 也將被設(shè)置。
如果模塊已被導(dǎo)入則此函數(shù)將重載它。 請(qǐng)參閱 PyImport_ReloadModule() 了解重載模塊的預(yù)定方式。
如果 name 指向一個(gè)形式為 package.module 的帶點(diǎn)號(hào)的名稱,則任何尚未創(chuàng)建的包結(jié)構(gòu)仍然不會(huì)被創(chuàng)建。
另請(qǐng)參閱 PyImport_ExecCodeModuleEx() 和 PyImport_ExecCodeModuleWithPathnames()。
PyObject *PyImport_ExecCodeModuleEx(const char *name, PyObject *co, const char *pathname)
Return value: New reference. Part of the Stable ABI.
類似于 PyImport_ExecCodeModule(),但如果 pathname 不為 NULL 則會(huì)被設(shè)為模塊對(duì)象的 __file__ 屬性的值。
參見 PyImport_ExecCodeModuleWithPathnames()。
PyObject *PyImport_ExecCodeModuleObject(PyObject *name, PyObject *co, PyObject *pathname, PyObject *cpathname)
Return value: New reference. Part of the Stable ABI since version 3.7.
類似于 PyImport_ExecCodeModuleEx(),但如果 cpathname 不為 NULL 則會(huì)被設(shè)為模塊對(duì)象的 __cached__ 值。 在三個(gè)函數(shù)中,這是推薦使用的一個(gè)。
3.3 新版功能.
PyObject *PyImport_ExecCodeModuleWithPathnames(const char *name, PyObject *co, const char *pathname, const char *cpathname)
Return value: New reference. Part of the Stable ABI.
類似于 PyImport_ExecCodeModuleObject(),但 name, pathname 和 cpathname 為 UTF-8 編碼的字符串。如果 pathname 也被設(shè)為 NULL 則還會(huì)嘗試根據(jù) cpathname 推斷出前者的值。
3.2 新版功能.
在 3.3 版更改: 如果只提供了字節(jié)碼路徑則會(huì)使用 imp.source_from_cache() 來計(jì)算源路徑。
long PyImport_GetMagicNumber()
Part of the Stable ABI.
返回 Python 字節(jié)碼文件(即 .pyc 文件)的魔數(shù)。 此魔數(shù)應(yīng)當(dāng)存在于字節(jié)碼文件的開頭四個(gè)字節(jié)中,按照小端字節(jié)序。 出錯(cuò)時(shí)返回 -1。
在 3.3 版更改: 失敗時(shí)返回值 -1。
const char *PyImport_GetMagicTag()
Part of the Stable ABI.
針對(duì) PEP 3147 格式的 Python 字節(jié)碼文件名返回魔術(shù)標(biāo)簽字符串。 請(qǐng)記住在 sys.implementation.cache_tag 上的值是應(yīng)當(dāng)被用來代替此函數(shù)的更權(quán)威的值。
3.2 新版功能.
PyObject *PyImport_GetModuleDict()
Return value: Borrowed reference. Part of the Stable ABI.
返回用于模塊管理的字典 (即 sys.modules)。 請(qǐng)注意這是針對(duì)每個(gè)解釋器的變量。
PyObject *PyImport_GetModule(PyObject *name)
Return value: New reference. Part of the Stable ABI since version 3.8.
返回給定名稱的已導(dǎo)入模塊。 如果模塊尚未導(dǎo)入則返回 NULL 但不會(huì)設(shè)置錯(cuò)誤。 如果查找失敗則返回 NULL 并設(shè)置錯(cuò)誤。
3.7 新版功能.
PyObject *PyImport_GetImporter(PyObject *path)
Return value: New reference. Part of the Stable ABI.
返回針對(duì)一個(gè) sys.path/pkg.__path__ 中條目 path 的查找器對(duì)象,可能會(huì)通過 sys.path_importer_cache 字典來獲取。 如果它尚未被緩存,則會(huì)遍歷 sys.path_hooks 直至找到一個(gè)能處理該 path 條目的鉤子。 如果沒有可用的鉤子則返回 None;這將告知調(diào)用方 path based finder 無法為該 path 條目找到查找器。 結(jié)果將緩存到 sys.path_importer_cache。 返回一個(gè)指向查找器對(duì)象的新引用。
int PyImport_ImportFrozenModuleObject(PyObject *name)
Return value: New reference. Part of the Stable ABI since version 3.7.
加載名稱為 name 的已凍結(jié)模塊。 成功時(shí)返回 1,如果未找到模塊則返回 0,如果初始化失敗則返回 -1 并設(shè)置一個(gè)異常。 要在加載成功后訪問被導(dǎo)入的模塊,請(qǐng)使用 PyImport_ImportModule()。 (請(qǐng)注意此名稱有誤導(dǎo)性 —- 如果模塊已被導(dǎo)入此函數(shù)將重載它。)
3.3 新版功能.
在 3.4 版更改: __file__ 屬性將不再在模塊上設(shè)置。
int PyImport_ImportFrozenModule(const char *name)
Part of the Stable ABI.
類似于 PyImport_ImportFrozenModuleObject(),但其名稱為 UTF-8 編碼的字符串而不是 Unicode 對(duì)象。
struct _frozen
這是針對(duì)已凍結(jié)模塊描述器的結(jié)構(gòu)類型定義,與由freeze工具所生成的一致 (請(qǐng)參看 Python 源代碼發(fā)行版中的 Tools/freeze/)。 其定義可在 Include/import.h 中找到:
struct _frozen {const char *name;const unsigned char *code;int size;bool is_package;};
在 3.11 版更改: The new is_package field indicates whether the module is a package or not. This replaces setting the size field to a negative value.
const struct _frozen *PyImport_FrozenModules
This pointer is initialized to point to an array of _frozen records, terminated by one whose members are all NULL or zero. When a frozen module is imported, it is searched in this table. Third-party code could play tricks with this to provide a dynamically created collection of frozen modules.
int PyImport_AppendInittab(const char *name, PyObject *(*initfunc)(void))
Part of the Stable ABI.
向現(xiàn)有的內(nèi)置模塊表添加一個(gè)模塊。 這是對(duì) PyImport_ExtendInittab() 的便捷包裝,如果無法擴(kuò)展表則返回 -1。 新的模塊可使用名稱 name 來導(dǎo)入,并使用函數(shù) initfunc 作為在第一次嘗試導(dǎo)入時(shí)調(diào)用的初始化函數(shù)。 此函數(shù)應(yīng)當(dāng)在 Py_Initialize() 之前調(diào)用。
struct _inittab
描述內(nèi)置模塊列表中的一個(gè)條目的結(jié)構(gòu)體。 每個(gè)結(jié)構(gòu)體都給出了內(nèi)置在解釋器中的某個(gè)模塊的名稱和初始化函數(shù)。 名稱是一個(gè) ASCII 編碼的字符串。 嵌入了 Python 的程序可以使用該結(jié)構(gòu)體的數(shù)組來與 PyImport_ExtendInittab() 相結(jié)合以提供額外的內(nèi)置模塊。 該結(jié)構(gòu)體在 Include/import.h 中被定義為:
struct _inittab {const char *name; /* ASCII encoded string */PyObject* (*initfunc)(void);};
int PyImport_ExtendInittab(struct _inittab *newtab)
將內(nèi)置模塊表添加一組模塊。 newtab 數(shù)組必須以一個(gè)包含以 NULL 作為 name 字段的崗哨條目結(jié)束;未能提供崗哨值會(huì)導(dǎo)致內(nèi)存錯(cuò)誤。 成功時(shí)返回 0 或者如果無法分配足夠內(nèi)存來擴(kuò)展內(nèi)部表則返回 -1。 當(dāng)發(fā)生失敗時(shí),將不會(huì)添加模塊到內(nèi)部表。 此函數(shù)必須在 Py_Initialize() 之前調(diào)用。
如果 Python 要被多次初始化,則 PyImport_AppendInittab() 或 PyImport_ExtendInittab() 必須在每次 Python 初始化之前調(diào)用。
分享標(biāo)題:創(chuàng)新互聯(lián)Python教程:導(dǎo)入模塊
URL標(biāo)題:http://fisionsoft.com.cn/article/cdjdoeg.html


咨詢
建站咨詢
