如何为扩展模块指定其他名称?

时间:2012-08-28 20:17:40

标签: python module python-2.7

我有一个名为&#39; pkg&#39;有几个扩展模块,用C ++编写,它们驻留在具有名称&#39; _module1.so&#39;,&#39; _module2.so&#39;等的共享库中。这些可以使用通常的语法导入:< / p>

import _module1

但是,我希望用户将模块名称视为&#39; mod1&#39;,&#39; mod2&#39;等,以便他们像这样进行导入:

import mod1

如果没有重命名共享库,有没有办法做到这一点?

感谢名单。

3 个答案:

答案 0 :(得分:4)

如果您不介意在源代码中使用原始模块名称,但只想使用替代名称,则可以使用以下语法:

import _module1 as mod1

答案 1 :(得分:1)

除了导入别名建议之外,您还可以在代码中创建一个mod1文件夹,其中包含__init__.py文件,其中包含:

from _module1 import *

现在执行import mod1将运行__init__.py文件,该文件将加载module_1中的所有内容并将其放入mod1的命名空间,从而有效地制作mod1就像_module1一样(假设import *按预期工作)。

答案 2 :(得分:1)

我还看到了passlib使用的更复杂的方法。基本上,用户友好的模块使用代理来处理调度项目中使用的多个子模块,而不会牺牲可用性。

主模块可能如下所示:

from mymodule.registry import _proxy
import sys
sys.modules[__name__] = _proxy

_proxy基本上是proxy pattern的一个实现,并处理延迟加载等。

如果您不想打扰代理:

"""Main module `mod1`"""

import _module1
import sys
sys.modules[__name__] = _module1