我有一个名为“pkg”的包,其中包含几个用 C++ 编写的扩展模块,它们驻留在名称为“_module1.so”、“_module2.so”等的共享库中。这些可以使用通常的语法导入:
import _module1
但是,我希望用户将模块名称视为“mod1”、“mod2”等,以便他们像这样进行导入:
import mod1
有没有办法在不重命名共享库的情况下做到这一点?
谢谢。
我有一个名为“pkg”的包,其中包含几个用 C++ 编写的扩展模块,它们驻留在名称为“_module1.so”、“_module2.so”等的共享库中。这些可以使用通常的语法导入:
import _module1
但是,我希望用户将模块名称视为“mod1”、“mod2”等,以便他们像这样进行导入:
import mod1
有没有办法在不重命名共享库的情况下做到这一点?
谢谢。
如果您不介意在源代码中使用原始模块名称,而只想使用替代名称,则可以使用以下语法:
import _module1 as mod1
除了导入别名建议之外,您还可以mod1
在代码中创建一个文件夹,其中包含一个__init__.py
文件,其中包含:
from _module1 import *
现在doingimport mod1
将运行该__init__.py
文件,该文件将从中加载所有内容module_1
并将其放入mod1
的命名空间中,有效地使mod1
行为像_module1
(假设import *
按预期工作)。
我还看到了一个更复杂的方法passlib
。基本上,用户友好的模块使用代理来处理对项目中使用的多个子模块的调度,而不会牺牲可用性。
主模块可能如下所示:
from mymodule.registry import _proxy
import sys
sys.modules[__name__] = _proxy
如果您不想打扰代理:
"""Main module `mod1`"""
import _module1
import sys
sys.modules[__name__] = _module1