2

我有一个名为“pkg”的包,其中包含几个用 C++ 编写的扩展模块,它们驻留在名称为“_module1.so”、“_module2.so”等的共享库中。这些可以使用通常的语法导入:

import _module1

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

import mod1

有没有办法在不重命名共享库的情况下做到这一点?

谢谢。

4

3 回答 3

4

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

import _module1 as mod1
于 2012-08-28T20:20:46.890 回答
1

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

from _module1 import *

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

于 2012-08-28T20:24:06.473 回答
1

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

主模块可能如下所示:

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

_proxy基本上是代理模式的实现,并处理延迟加载等。

如果您不想打扰代理:

"""Main module `mod1`"""

import _module1
import sys
sys.modules[__name__] = _module1
于 2012-08-28T20:24:58.853 回答