Python中的动态导入
我该如何使用 imp
模块来进行这个导入呢?
from module import *
注意事项:
- 我需要使用
imp
模块,因为我需要做几个语句,并且我想动态地完成这件事。 - 我需要使用
*
,因为我希望在我进行导入的文件中,module
中定义的变量和方法可以直接使用,也就是说,我不想写成module.method
或module.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 *
的具体实现。