我有一个名为&#39; pkg&#39;有几个扩展模块,用C ++编写,它们驻留在具有名称&#39; _module1.so&#39;,&#39; _module2.so&#39;等的共享库中。这些可以使用通常的语法导入:< / p>
import _module1
但是,我希望用户将模块名称视为&#39; mod1&#39;,&#39; mod2&#39;等,以便他们像这样进行导入:
import mod1
如果没有重命名共享库,有没有办法做到这一点?
感谢名单。
答案 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