导入模块 – 实用程序(Python教程)(参考资料)
导入模块
- PyObject *
PyImport_ImportModule
( const char *name) - Return value: New reference.
这是
PyImport_ImportModuleEx()
的简化界面下面,将globals和locals参数设置为NULL和level setto 0.当name参数包含一个点(当它指定了一个包的子模块),fromlist参数设置为列表["*"]
,以便返回值是模块而不是包含它的顶级包,否则就是这种情况。。(不幸的是,当name infact指定子包而不是子模块时,这会产生额外的副作用:加载包__all__
变量中指定的子模块。)返回对导入模块的新引用,或者NULL失败时设置异常。一个模块的失败导入不会将模块保留在sys.modules
.这个函数总是使用绝对导入.
- PyObject*
PyImport_ImportModuleNoBlock
( const char *name) - Return value: New reference.
此函数是
PyImport_ImportModule()
.的弃用别名在版本3.3中更改:此函数用于在另一个线程持有导入锁定时立即失败。但是在Python 3.3中,锁定方案在大多数情况下切换到每个模块的锁定,因此不再需要此函数的特殊行为.
- PyObject*
PyImport_ImportModuleEx
( const char *name,PyObject *globals,PyObject *locals,PyObject *fromlist) - Return value: New reference.
导入一个模块。最好通过引用内置的Python函数来描述
__import__()
.返回值是对导入的模块或顶级包的新引用,或NULL并且在失败时设置异常。就像
__import__()
一样,当一个包的子模块被请求时的返回值通常是顶级包,除非给出非空的fromlist.Failing进口删除不完整的模块对象,比如
PyImport_ImportModule()
.
- PyObject *
PyImport_ImportModuleLevelObject
( PyObject *name,PyObject *globals,PyObject *locals,PyObject *fromlist,int level) - Return value: New reference.
导入模块。最好通过参考内置Python函数
__import__()
来描述,作为标准__import__()
函数callsthis函数直接返回值是对导入的模块或顶级包的新引用,或NULL,失败时设置异常。像
__import__()
,请求包的子模块时的返回值通常是顶级包,除非给出非空的fromlist.在3.3版本中
- PyObject *
PyImport_ImportModuleLevel
( const char *name,PyObject *globals,PyObject *locals,PyObject *fromlist,int level) - Return value: New reference.
类似于
PyImport_ImportModuleLevelObject()
,但是name是aUTF-8编码的字符串而不是Unicode对象.更改版本3.3:不再接受level的负值.
- PyObject*
PyImport_Import
( PyObject *name) - Return value: New reference.
这个是一个更高级别的接口,调用当前的“导入钩子函数”(具有明确的level0,意思是绝对导入)。它来自
__import__()
的__builtins__
当前的全局变量。这意味着导入是使用当前环境中安装的任何importhook来完成的.这个函数总是使用绝对导入.
- PyObject*
PyImport_ReloadModule
(PyObject *m) - Return value: New reference.
- PyObject *
PyImport_AddModuleObject
(PyObject *name) - Return value: Borrowed reference.
返回模块名对应的模块对象。name论点可以是
package.module
。首先检查模块字典是否存在,如果没有,则创建一个新的并插入modulesdictionary。返回NULL,如果设置失败则注意
此功能不加载或导入模块;如果模块尚未加载,您将获得一个空的模块对象。使用
PyImport_ImportModule()
或其中一个变体导入模块。如果不存在,则name的adotted名称隐含的包结构不会被创建.版本3.3.
- PyObject*
PyImport_AddModule
(const char *name) - Return value: Borrowed reference.
类似于
PyImport_AddModuleObject()
,但名称是UTF-8编码的字符串而不是Unicode对象.
- PyObject*
PyImport_ExecCodeModule
( const char *name,PyObject *co) - Return value: New reference.
给定一个模块名称(可能是
package.module
的形式)和一个来自Python字节码文件的代码对象,或者从内置函数compile()
,加载模块。如果发生错误,则返回对模块对象的新引用,或NULL并设置异常。name在错误的情况下从sys.modules
中删除,即使name已经在sys.modules
进入PyImport_ExecCodeModule()
。在sys.modules
是危险的,因为这些模块的导入无法知道模块对象是未知的(并且可能会损坏模块作者的意图)状态模块的
__spec__
和__loader__
如果没有设置,将设置适当的值。spec的加载器将设置为模块的__loader__
(如果设置)和SourceFileLoader
的实例,否则模块的
__file__
属性将被设置为代码对象的co_filename
。如果适用的话,__cached__
也会设置.如果模块已经导入,该功能将重新加载模块。请参阅
PyImport_ReloadModule()
了解重新加载模块的方法.如果name指向表单
package.module
的虚线名称,任何尚未创建的包结构都将仍然没有被创造.参见
PyImport_ExecCodeModuleEx()
和PyImport_ExecCodeModuleWithPathnames()
.
- PyObject *
PyImport_ExecCodeModuleEx
( const char *name,PyObject *co,const char *pathname) - Return value: New reference.
和
PyImport_ExecCodeModule()
一样,但模块对象的__file__
属性设置为pathname如果它不是NULL
.参见
PyImport_ExecCodeModuleWithPathnames()
.
- PyObject *
PyImport_ExecCodeModuleObject
( PyObject *name,PyObject *co,PyObject *pathname,PyObject *cpathname) - Return value: New reference.
和
PyImport_ExecCodeModuleEx()
一样,但模块对象的__cached__
属性设置为cpathname如果它是非 –NULL
在这三个函数中,这是首选的函数.新版本3.3.
- PyObject*
PyImport_ExecCodeModuleWithPathnames
( const char *name,PyObject *co,const char *pathname,const char *cpathname) - Return value: New reference.
喜欢
PyImport_ExecCodeModuleObject()
,但name, pathname和cpathname是UTF-8编码的字符串。如果前者设置为pathname,也试图弄清楚cpathname的值应该是NULL
.版本3.2.
改版3.3:使用
imp.source_from_cache()
在计算源路径时,只提供字节码路径.
- long
PyImport_GetMagicNumber
() - 返回Python字节码文件的幻数(a.k.a。
.pyc
文件)。幻数应存在于字节码文件的前四个字节中,采用小端字节顺序。返回-1
在错误上改版3.3: 的返回值
-1
失败时
- const char *
PyImport_GetMagicTag
() - 返回PEP 3147 格式化Python字节码文件名。请记住
sys.implementation.cache_tag
的值是权威的,应该用来代替这个函数.新版本3.2.
- PyObject*
PyImport_GetModuleDict
() - Return value: Borrowed reference.
返回用于模块管理的字典(a.k.a.
sys.modules
)。请注意,这是一个每个解释器变量.
- PyObject *
PyImport_GetModule
( PyObject *name) - Return value: New reference.
返回已导入的具有给定名称的模块。如果尚未导入模块,则返回NULL但不会设置错误。如果查找失败,则返回NULL并设置错误.
版本3.7.
- PyObject*
PyImport_GetImporter
( PyObject *path) - Return value: New reference.
返回一个取景器对象
sys.path
/pkg.__path__
item path,可能是从sys.path_importer_cache
dict中取出来的。如果它尚未缓存,则遍历sys.path_hooks
直到找到可以处理路径项的hookis。如果没有钩子可以返回None
;这告诉我们的来电者基于路径的查找器找不到这个路径项目的回应。将结果缓存在sys.path_importer_cache
中。返回对finder对象的新引用.
- void
_PyImport_Init
() - 初始化导入机制。仅供内部使用.
- void
PyImport_Cleanup
() - 清空模块台。仅供内部使用.
- void
_PyImport_Fini
() - 完成导入机制。仅供内部使用.
- int
PyImport_ImportFrozenModuleObject
( PyObject *name) - Return value: New reference.
加载一个名为name的冻结模块。返回
1
成功,0
如果找不到模块,则-1
如果初始化失败,则设置异常。要在成功加载时访问导入的模块,请使用PyImport_ImportModule()
。(注意用词不当 – 如果模块已经导入,该功能会重新加载模块。)3.3版本中的新功能
更改版本3.4:
__file__
在模块上不再设置属性.
- int
PyImport_ImportFrozenModule
( const char *name) - 类似于
PyImport_ImportFrozenModuleObject()
,但名称是aUTF-8编码的字符串而不是Unicode对象.
- struct
_frozen
-
这是冻结模块描述符的结构类型定义,由冻结实用程序生成(参见//源程序中的
Tools/freeze/
)。在Include/import.h
中找到它的定义是:struct _frozen { const char *name; const unsigned char *code; int size; };
- const struct _frozen *
PyImport_FrozenModules
- 这个指针初始化为指向
struct _frozen
记录的数组,由一个成员全部NULL或零。导入冻结模块时,将在此表中搜索。第三方代码可以通过它来提供动态创建的冻结模块集合.
- int
PyImport_AppendInittab
( const char *name,PyObject *(*initfunc)(void)) - 将一个模块添加到现有的内置模块表中。这是
PyImport_ExtendInittab()
周围的便利包装,如果桌子不能伸展,则返回-1
。新模块可以通过名称name导入,并使用函数initfunc作为第一次尝试导入时调用的初始化函数。这应该在Py_Initialize()
.
- struct
_inittab
- 之前调用,该结构描述了内置模块列表中的单个条目。这些结构中的每一个都为内置于解释器的模块提供了名称和初始化函数。该名称是ASCII编码的字符串。用于Python的程序可以使用这些结构的数组与
PyImport_ExtendInittab()
一起提供额外的内置模块。该结构在Include/import.h
中定义为:struct _inittab { const char *name; /* ASCII encoded string */ PyObject* (*initfunc)(void); };
评论被关闭。