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

从模块动态导入所有内容(*)

施季
2023-03-14
问题内容

我有一个要动态导入的Python模块,仅给出了模块名称的字符串。通常,我使用importlibor
__import__,并且在我知道我想从模块中导入哪些对象的情况下,效果很好,但是有一种方法可以等效import *地动态进行。还是有更好的方法?

我一般都知道使用它是一种不好的做法,import *但是我尝试导入的模块是在运行时自动生成的,而且我无法知道包含要处理的类的确切模块。

谢谢。


问题答案:

我想出了一些难看的hacky代码,它可以在python 2.6中使用。我不确定这是否是最聪明的事情,也许这里的其他一些人有一些见识:

test = __import__('os',globals(),locals())
for k in dir(test):
    globals()[k] = test.__dict__[k]

您可能希望在此处进行检查,以确保不会覆盖全局名称空间中的任何内容。您可能会避免使用globals部分,而只浏览感兴趣的类的每个动态导入的模块。这可能比用导入的所有内容污染全局名称空间要好得多。

例如,假设您的类名为urllib2中的“请求”

test = __import__('urllib2',globals(),locals())
cls = None
if 'Request' in dir(test):
    cls = test.__dict__['Request']
    # you found the class now you can use it!
    cls('http://test.com')


 类似资料:
  • 问题内容: 我想动态加载模块,给定它的字符串名(来自环境变量)。我正在使用Python 2.7。我知道我可以做类似的事情: 这大致相当于 (其中)。问题是,我需要相当于 因为我希望能够访问模块中的所有方法和变量。我试过了 但是这样做会导致很多错误。有没有一种方法可以在Python 2.7中动态导入模块的所有方法和属性? 问题答案: 如果您有模块对象,则可以模仿逻辑用法,如下所示: 但是,这几乎肯定

  • 问题内容: 我有一台受信任的远程服务器,其中存储了许多自定义Python模块。我可以通过HTTP(例如,使用)作为文本/纯文本来获取它们,但是我无法将获取的模块代码保存到本地硬盘上。如何将代码作为完全可操作的Python模块(包括其全局变量和导入)导入? 我想我必须使用和模块功能的某种组合,但是我还无法使其工作。 问题答案: 看起来这应该可以解决问题:导入动态生成的模块 另外,按照ActiveSt

  • 16.6. 动态导入模块 好了,大道理谈够了。让我们谈谈动态倒入数据吧。 首先,让我们看一看正常的导入模块。 import module 语法查看搜索路径寻找已命名模块并以名字导入它们。你甚至于可以以这种方法,以逗号分割同时导入多个模块,本章代码前几行就是这样做的。 例 16.13. 同时导入多个模块 import sys, os, re, unittest 这里同时导入四个模块:sys (

  • 问题内容: 我的目录结构如下: 从导入模块。我尝试结合使用with ,但是使用该方法,我只能在using下直接导入所有子模块。我想让他们全都陷入困境。导入的所有子模块的最干净的方法是什么,以便可以从中访问? 编辑:对不起,我有点含糊。我想在运行时导入子模块,而不在中明确指定它们。我可以用来获取子模块名称(除非有人知道更好的方法),但是我不确定使用这些名称(或者返回的ImpImporters ?)导

  • 问题内容: 我正在尝试从其他目录动态导入模块。我正在从这个问题中得到答案。我在名为foo的目录中有一个名为bar的模块。主脚本将在foo的父目录中运行。 这是我到目前为止在测试脚本中拥有的代码(正在foo的父目录中运行) 和bar.py的代码 但是当我运行test.py时,出现此错误: 问题答案: 需要导入模块的路径名+文件名,您应该将源代码更改为以下代码之一:

  • 问题内容: 我想知道是否有任何方法可以导入包的全部内容,从而不必在调用包名称之前对包中的内容添加前缀? 例如,有一种方法可以替代此方法: 有了这个: 问题答案: Go编程语言规范 进口报关单 如果出现一个明显的句点(。)而不是名称,则在该软件包的package块中声明的所有软件包导出标识符都将在导入源文件的file块中声明,并且必须在不使用限定符的情况下进行访问。 例如, 游乐场:https :

  • 问题内容: 我的内存中有一些Python文件,可能是StringIO。如何导入存储在内存中的模块文件?我不想将其保存到磁盘然后加载。 看起来像: 问题答案: 一种不错的方法是使用PEP 302中所述的自定义元导入挂钩。可以编写一个从字符串字典动态导入模块的类: 顺便说一句:如果您不想太多,而只想导入一个字符串,那么请坚持执行load_module方法。您只需要在里面。

  • 问题内容: 目录结构: module1.py: 我如何才能将所有模块从模块添加到主类而没有前缀(即像foo = fooBar()一样使用它们,而不是foo = my_modules.module1.fooBar())。 一个明显的决定是在main.py中编写如下内容: 但是我不想在创建新的moduleN时更改main.py。有解决方案吗? 我确实知道导入这样的类不是一个好主意,但是我对此仍然很好奇