Importing Modules

这是下面PyImport_ImportModuleEx()的简化接口,将* globals locals 参数设置为NULL并将 level 设置为 0.当 name *参数包含一个点时(当它指定包的子模块时), * fromlist 参数设置为列表['*'],以便返回值是命名模块,而不是包含它的顶级包。 (不幸的是,当 name *实际上指定了子包而不是子模块时,这会产生额外的副作用:加载包__all__变量中指定的子模块.)返回对导入的模块或NULL的新引用,并带有异常集失败。导入模块失败不会将模块留在sys.modules中。

此函数始终使用绝对导入。

此函数是PyImport_ImportModule()的不推荐使用的别名。

在版本 3.3 中更改:此Function曾经在另一个线程持有导入锁时立即失败。不过在 Python 3.3 中,出于大多数目的,锁定方案已切换为按模块锁定,因此不再需要此函数的特殊行为。

导入模块。最好pass参考内置的 Python 函数import()来描述。

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

导入失败会删除不完整的模块对象,例如PyImport_ImportModule()

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

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

版本 3.3 中的新Function。

PyImport_ImportModuleLevelObject()相似,但名称是 UTF-8 编码的字符串,而不是 Unicode 对象。

在版本 3.3 中进行了更改:* level *的负值不再被接受。

这是一个更高级别的接口,它调用当前的“导入钩子函数”(显式* level *为 0,表示绝对导入)。它从当前全局变量的__builtins__调用import()函数。这意味着可以使用当前环境中安装的任何导入钩子来完成导入。

此函数始终使用绝对导入。

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

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

Note

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

版本 3.3 中的新Function。

PyImport_AddModuleObject()相似,但名称是 UTF-8 编码的字符串,而不是 Unicode 对象。

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

如果尚未设置模块的specloader,则将使用适当的值进行设置。规范的加载器将设置为模块的__loader__(如果已设置),否则将设置为SourceFileLoader的实例。

模块的file属性将设置为代码对象的co_filename。如果适用,还将设置cached

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

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

另请参见PyImport_ExecCodeModuleEx()PyImport_ExecCodeModuleWithPathnames()

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

另请参见PyImport_ExecCodeModuleWithPathnames()

类似于PyImport_ExecCodeModuleEx(),但是如果模块对象的cached属性不是NULL,则设置为* cpathname *。在这三个Function中,这是首选使用的Function。

版本 3.3 中的新Function。

类似于PyImport_ExecCodeModuleObject(),但是* name pathname cpathname 是 UTF-8 编码的字符串。如果前者设置为NULL,还try从 cpathname 中找出 pathname *的值。

3.2 版中的新Function。

在版本 3.3 中进行了更改:如果仅提供字节码路径,则使用imp.source_from_cache()计算源路径。

在版本 3.3 中更改:失败时返回值-1

3.2 版中的新Function。

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

返回具有给定名称的已导入模块。如果尚未导入模块,则返回NULL,但不设置错误。返回NULL并在查找失败的情况下设置错误。

3.7 版中的新Function。

返回sys.path/pkg.__path__项* path *的查找器对象,可能是从sys.path_importer_cache字典中获取的。如果尚未缓存,请遍历sys.path_hooks直到找到可以处理路径项的钩子。如果没有钩子,则返回None;这告诉我们的调用者基于路径的查找器找不到此路径项的查找器。将结果缓存在sys.path_importer_cache中。返回对查找器对象的新引用。

加载名为* name *的冻结模块。如果成功返回1,如果找不到该模块则返回0,如果初始化失败则返回-1并设置一个异常。要成功加载导入的模块,请使用PyImport_ImportModule()。 (请注意使用错误的名称-如果该函数已经导入,则它将重新加载该模块.)

版本 3.3 中的新Function。

在版本 3.4 中进行了更改:不再在模块上设置__file__属性。

struct _frozen {
    const char *name;
    const unsigned char *code;
    int size;
};
struct _inittab {
    const char *name;           /* ASCII encoded string */
    PyObject* (*initfunc)(void);
};
首页