当前位置: 首页 > 面试题库 >

动态加载Python模块

龙成仁
2023-03-14
问题内容

我正在尝试动态加载我创建的模块。

现在这可以正常工作:

import structures.index

但是,如果我通过动态导入尝试相同的操作,它将失败。

struct = __import__("structures.index")

提供的错误是:

Error ('No module named structures.index',)

有什么想法吗?

编辑:使用完整范围时(它的工作原理?):

struct = __import__("neoform.structures.index")

这不会引发任何错误,但是,它不会加载索引模块,而是会加载“ neoform”模块。

“ struct”的结果是:

<module 'neoform' from '/neoform/__init__.py'>

另外,作为附带的问题,我该如何在动态加载的模块中实例化一个类?(假设所有模块都包含一个通用的类名)。

编辑:解决方案:(感谢coonj和Rick)这最终成功了。不知道为什么(但是),但是fromlist必须一定是“任何东西”,因为当我将字母“
a”作为值时,它就可以工作(奇怪,因为文件中只有1个类)。

def get_struct_module(self, name):
    try:
        return = __import__("neoform.structures." + name, fromlist='*')
    except ImportError, e:
        self.out.add("Could not load struct: neoform.structure." + name + "\n\n" + "Error " + str(e.args))

问题答案:

我不确定“失败”是什么意思,所以我只想说它__import__('structures.index')应该可以工作,但它不会在当前作用域中分配模块名称。为此(然后在动态导入的模块中使用一个类),您将必须使用:

structures = __import__('structures.index')
structures.index.SomeClass(...)

有关完整的详细信息,__import__请参见此处。

编辑:(基于问题编辑)

要导入neoform.structures.index并返回index模块,请执行以下操作:

structures = __import__('neoform.structures.index', 
                        fromlist=['does not in fact matter what goes here!'])

因此,如果您具有软件包名称的列表packages,则可以使用以下代码导入其index模块并MyClass为每个模块实例化一些类:

modules = [ __import__('neoform.%s.index' % pkg, fromlist=['a']) 
            for pkg in packages ]
objects = [ m.MyClass() for m in modules ]


 类似资料:
  • 本文向大家介绍Python动态加载模块的3种方法,包括了Python动态加载模块的3种方法的使用技巧和注意事项,需要的朋友参考一下 1、使用系统函数__import_() 2、使用imp 模块 3、使用exec

  • 问题内容: 在Java中,我可以向类路径中动态添加内容并加载类(“动态”的意思是无需重新启动应用程序)。是否有一个已知的框架/库可以处理模块的动态加载/卸载而无需重新启动? 通常的设置是负载平衡器,应用程序的多个实例以及逐步部署和重新启动新版本(尤其是对于Web应用程序)。我正在寻找其他东西- 具有多个服务/插件的应用程序,可能是单实例桌面应用程序,在其中禁用单个服务很便宜,但是关闭或重新启动完整

  • 问题内容: 好的,我已经搜索了高低位,但是无法可靠地确定Webpack是否可行。 https://github.com/webpack/webpack/tree/master/examples/require.context 似乎表明可以将字符串传递给函数并加载模块… 但是我的尝试没有用:webpack.config.js server.js modules /模块中名为test.js的模块 但是

  • 问题内容: 我希望IPython或Python解释器在启动它们时自动加载模块。 可能吗? 例如,当我启动IPython时: 在教程页面中可以找到类似SymPy的live shell的 东西。 问题答案: 检查文件-您可以列出要在启动时加载的所有模块。

  • 我有一个包含一些项目(例如汽车)的列表,它是动态的,因此没有固定的长度。当我加载此列表时,它看起来像这样: 之后,我在ng-repeat循环中循环此列表并创建一些复选框,以便我可以选择项目: 现在我有一个用户对象。这个对象里面有一个数组“cars”,我想在其中推送所有选定的汽车,如果我取消选择它,请将其删除。我的对象看起来像这样: 所以当我选择一辆汽车时,它应该被推送到我的用户对象中的数组中,如果

  • 问题内容: 我正在使用express在Node.js中做一个项目。这是我的目录结构: 该目录包含许多与API相关的JS文件。我需要做的是建立一个挂钩系统,每当从快速HTTP服务器请求一个API函数时,它就会执行相应的API处理程序中指定的任何操作。这可能令人困惑,但希望您能理解。 Larry通过POST发送请求以获取用户详细信息。 服务器查找以查找与该请求关联的功能。 服务器执行操作并将数据发送回