Importing Modules

这是下面PyImport_ImportModuleEx()的简化接口,将* globals locals 参数设置为 NULL level 设置为 0. name 参数包含点时(当它指定包的子模块时) ),将 fromlist 参数设置为列表['*'],以便返回值是命名模块,而不是包含它的顶级包。 (不幸的是,当 name 实际上指定了子包而不是子模块时,这会产生额外的副作用:加载包__all__变量中指定的子模块.)返回对导入模块的新引用,或者返回 NULL *并带有一个失败时设置的异常。在 Python 2.4 之前,如果遇到故障,仍可以创建该模块-检查sys.modules找出答案。从 Python 2.4 开始,模块导入失败将不再将模块留在sys.modules中。

在版本 2.4 中进行了更改:导入失败会删除不完整的模块对象。

在 2.6 版中更改:始终使用绝对导入。

2.6 版的新Function。

导入模块。最好pass参考内置的 Python 函数import()来描述,因为标准import()函数直接调用此函数。

返回值是对导入的模块或顶级包或* NULL 的新引用,并带有针对失败设置的异常(在 Python 2.4 之前,在这种情况下仍可以创建该模块)。就像import()一样,当请求包的子模块时,返回值通常是顶级包,除非给出了非空的 fromlist *。

在版本 2.4 中进行了更改:导入失败会删除不完整的模块对象。

在 2.6 版中进行了更改:该函数是PyImport_ImportModuleLevel()的别名,级别为-1,表示相对导入。

导入模块。最好pass参考内置的 Python 函数import()来描述,因为标准import()函数直接调用此函数。

返回值是对导入的模块或顶级程序包的新引用,或者是* NULL (在失败时设置了 exception)。就像import()一样,当请求包的子模块时,返回值通常是顶级包,除非给出了非空的 fromlist *。

2.5 版的新Function。

这是一个高级接口,它调用当前的“导入钩子函数”。它从当前全局变量的__builtins__调用import()函数。这意味着可以使用当前环境中安装的任何导入钩子来完成导入。passrexecihooks

在 2.6 版中更改:始终使用绝对导入。

重新加载模块。最好pass参考内置的 Python 函数reload()来描述,因为标准reload()函数直接调用此函数。返回对重新加载的模块的新引用,或者返回* NULL *,并在失败时设置异常(在这种情况下该模块仍然存在)。

返回与模块名称相对应的模块对象。 * name 参数的形式可以为package.module。首先检查模块词典中是否有模块词典,如果没有,则创建一个新的模块并将其插入模块词典中。返回 NULL *,并在失败时设置异常。

Note

此Function不会加载或导入模块;如果尚未加载模块,则将获得一个空的模块对象。使用PyImport_ImportModule()或其变体之一来导入模块。如果名称不存在,则不会创建点名称*所暗示的包结构。

给定模块名称(可能是package.module的形式)和从 Python 字节码文件读取或从内置函数compile()获得的代码对象,加载模块。返回对模块对象的新引用;如果发生错误,则返回* NULL 并设置一个异常。在 Python 2.4 之前,仍然可以在错误情况下创建该模块。从 Python 2.4 开始,在错误情况下,即使在 ImportingPyImport_ExecCodeModule() name 已经在sys.modules中,也会从sys.modules中删除 name *。将未完全初始化的模块留在sys.modules中是危险的,因为此类模块的导入无法知道模块对象是未知状态(并且就模块作者的意图而言可能已损坏)。

模块的__file__属性将设置为代码对象的co_filename

如果模块已经导入,则此Function将重新加载该模块。有关重新加载模块的预期方法,请参见PyImport_ReloadModule()

如果* name *指向格式为package.module的点名,则仍不会创建任何尚未创建的包结构。

在版本 2.4 中进行了更改:在错误情况下,* name *从sys.modules中删除。

类似于PyImport_ExecCodeModule(),但是如果模块对象的__file__属性不是NULL,则设置为* pathname *。

返回用于模块 Management 的字典(也称为sys.modules)。请注意,这是每个解释器变量。

2.6 版的新Function。

struct _frozen {
    char *name;
    unsigned char *code;
    int size;
};
struct _inittab {
    char *name;
    void (*initfunc)(void);
};
首页