Python中的动态导入

2 投票
3 回答
1929 浏览
提问于 2025-04-17 07:26

我该如何使用 imp 模块来进行这个导入呢?

from module import *

注意事项:

  • 我需要使用 imp 模块,因为我需要做几个语句,并且我想动态地完成这件事。
  • 我需要使用 *,因为我希望在我进行导入的文件中,module 中定义的变量和方法可以直接使用,也就是说,我不想写成 module.methodmodule.variable。而且我想导入模块中的所有变量和方法,因为我不知道将来模块中可能会有什么方法或变量。

3 个回答

0

你可以通过以下方式来实现:

from imp import *

但请记住:

明确的比隐含的更好。

(这句话来自《Python之禅》 - 你可以通过输入以下命令来阅读它:import this

1

如果你在使用Django(正如评论中提到的),那么像这样的代码应该可以工作

from django.utils import importlib
my_module = importlib.import_module('app.my_module')
from my_module import *

不过我同意,这样做可能会有点危险

5

在这里!

def load_everything_from(module_names):
    g = globals()
    for module_name in module_names:
        m = __import__(module_name)
        names = getattr(m, '__all__', None)
        if names is None:
            names = [name for name in dir(m) if not name.startswith('_')]
        for name in names:
            g[name] = getattr(m, name)

我有点在胡乱猜测,先试着找一个 __all__ 符号,如果找不到的话,就用 dir() 来列出所有的符号,然后挑那些看起来不是私有的符号。要知道这样做是否和 Python 实际的逻辑足够接近,你得看看 import * 的具体实现。

撰写回答