导入模块

PyObject * PyImport_ImportModule const char  *name
Return value: New reference.

这是PyImport_ImportModuleEx()的简化界面下面,将globalslocals参数设置为NULLlevel 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_ReloadModulePyObject  *m
Return value: New reference.

重新加载模块。返回对重新加载的模块的新引用,或NULL在失败时设置异常(在这种情况下模块仍然存在).

PyObject * PyImport_AddModuleObjectPyObject  *name
Return value: Borrowed reference.

返回模块名对应的模块对象。name论点可以是package.module。首先检查模块字典是否存在,如果没有,则创建一个新的并插入modulesdictionary。返回NULL,如果设置失败则

注意

此功能不加载或导入模块;如果模块尚未加载,您将获得一个空的模块对象。使用 PyImport_ImportModule()或其中一个变体导入模块。如果不存在,则name的adotted名称隐含的包结构不会被创建.

版本3.3.

PyObject* PyImport_AddModuleconst 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, pathnamecpathname是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  *namePyObject *(*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);
};
int PyImport_ExtendInittab struct _inittab  *newtab
将一组模块添加到内置模块表中。newtab数组必须以一个包含NULL字段的name的标记条目结尾;未能提供sentinel值可能导致内存错误。成功返回0-1如果内存不足,可以扩展内部表。如果发生故障,则不会将任何模块添加到内部表中。这应该在Py_Initialize().

评论被关闭。