【发布时间】:2014-09-12 12:28:19
【问题描述】:
我无法在 python 中访问动态导入的模块。
要么我的调用语法错误,要么导入无法正常工作。
stackoverflow.com 上有很多主题涉及动态导入 Python。然而,我采用了这个网站的代码:https://www.daniweb.com/software-development/python/code/238387/really-simple-plugins-loader-import-all-modules-in-a-folder-in-one-swoop
它会自动导入文件夹中存在的所有模块并返回一个字典。
代码:
import glob, imp
from os.path import join, basename, splitext
def importPluginModulesIn(dir):
return dict( _load(path) for path in glob.glob(join(dir,'[!_]*.py')) )
def _load(path):
name, ext = splitext(basename(path))
return name, imp.load_source(name, path)
modules = importPluginModulesIn('modules_folder')
print modules
输出表明导入成功:
{'test_function': <module 'test_function' from 'modules_folder/test_function.py'>}
然而,建议的访问方法根本没有产生任何响应(应该打印:“测试完成。”):
modules['test_function'].__name__
任何人有任何建议如何解决这个问题? 谢谢!
编辑: Martijn Pieters 让我意识到我实际上弄错了模块和函数。 (见下面的 cmets。) 现在我的问题是如何在我的代码框架内实际调用嵌入到模块中的 test_function test_function.py?
编辑2: modules_folder中test_function.py的内容:
import time
def test_function():
print('Start.')
time.sleep(1)
print('Test complete.')
【问题讨论】:
-
模块已导入;为什么您希望模块名称为
Test complete.? in 模块中的什么会改变模块名称? -
'Test complete'是test_function的打印输出,不是它的名字!
-
对,但是你有一个模块,而不是一个函数!而您正在尝试访问该模块对象的
__name__,这是模块名称,而不是任何函数输出。 -
好的,我知道那是不准确的。现在如何调用模块 test_function.py 中的 test_function(.py 文件可以是模块,还是带有 init.py 的文件夹?)
标签: python python-2.7 plugins import