- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我注意到 Flask 正在使用 Werkzeug 来 __import__
一个模块,我有点困惑。我去查看了上面的文档,发现它似乎以某种方式让您在查找模块的位置方面提供了更多控制权,但我不确定确切如何,而且我的想法为零它与 importlib.import_module
有何不同。
Werkzeug 示例中的奇怪之处在于它只是说 __import__(import_name)
,所以我看不出这与仅使用 import
语句有什么不同,因为它忽略了可选的额外参数。
谁能解释一下?我查看了其他人之前就 SO 提出过类似问题,但他们的问题措辞不是很清楚,而且答案根本没有解决这个问题。
最佳答案
__import__
是一个用于导入模块的低级钩子(Hook)函数;它可用于通过将模块名称作为变量导入来动态导入模块,这是 import
语句不允许您这样做的。
importlib.import_module()
是该钩子(Hook)* 的包装器,用于为该功能生成一个不错的 API;它是 Python 2 的最新补充,在 Python 3 中更加充实。使用 __import__
的代码库通常这样做是因为它们希望与较旧的 Python 2 版本保持兼容,例如Python 2.7 之前的任何东西。
使用 __import__
的一个副作用可能是它返回导入的模块并且不向命名空间添加任何内容;如果您不想要新名称,则可以使用它导入,而无需删除新名称; using import somename
会将 somename
添加到您的命名空间,但 __import__('somename')
会返回导入的模块,然后您可以忽略它。出于这个原因,Werkzeug 在一个地方使用了钩子(Hook)。
所有其他用途都与动态导入有关。 Werkzeug 仍然支持 Python 2.6,所以不能使用 importlib
。
* importlib
是纯 Python 实现,而 import_module()
将使用该实现,而 __import__
将使用 C 优化版本。两个版本都回调 importlib._bootstrap._find_and_load()
,所以区别主要是学术性的。
关于python - 导入 vs __import__() vs importlib.import_module()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28231738/
根据 this answer , 你可以使用 importlib 到 import_module 使用像这样的相对导入: importlib.import_module('.c', 'a.b') 为什
我有一个简单的插件系统,简化形式如下。想法是插件将实现一个抽象类,并可以引发异常来发出拆卸信号。 # my_plugin.py import my_app class MyPlugin(my_app.
我正在尝试使用本指南运行聊天机器人示例:http://chatterbot.readthedocs.io/en/stable/tutorial.html 所以我收到此导入错误: ➜ examples
为了向我的程序(在 python 2.7 中)添加可用模块检查,我添加了以下代码来代替经典导入(目的是帮助某人定位和添加额外模块): mymodules = ['socket', 'requests'
这个问题在这里已经有了答案: Python: How to import all methods and attributes from a module dynamically (3 个答案) 关
我有以下文件夹结构,并且在 util.py 中有一个测试方法。运行 util 方法时,我看到在我试图获取所有类的模块中导入的模块出现错误。 Parent --report ----__init__.
我有一个现有的简单导入语句,如下所示: from booking import Booking 我想重写它以通过 importlib 库接受动态参数。 我的尝试有以下几种变体: from import
我想使用 importlib 中的 import_module 导入模块。当我这样做时,找不到我从模块引用的文件。如果我从 python shell 正常导入模块(不使用 main.py),它会按预期
具有相对模块名称的 importlib.import_module 有时会失败。 例如,我有这样一个包结构: ├── test0 │ ├── __init__.py │ ├── test1.p
我注意到 Flask 正在使用 Werkzeug 来 __import__ 一个模块,我有点困惑。我去查看了上面的文档,发现它似乎以某种方式让您在查找模块的位置方面提供了更多控制权,但我不确定确切如何
当尝试使用 manage.py 运行 runserver 或 shell 时,我得到一个 ImportError 异常。我正在使用 Django 1.9。 ImportError: No module
我正在尝试使用 importlib.import_module在 Python 2.7.2 中遇到奇怪的错误。 考虑以下目录结构: a | + - __init__.py
在我的 Django 测试之一中,我使用 django.utils.importlib.import_module类似于它的使用方式 here . 在升级到 django 1.8 时,我收到了弃用警告
我遇到了“模型未安装或抽象”错误,该错误仅发生在某些机器上,但不会发生在其他机器上,当我深入研究时,我发现问题是 load_app(self, app_name, can_postpone=False
我是 Django 新手。我有一个 Django 休息项目。当我运行它时,错误显示为 from django.utils.importlib import import_module ImportEr
我们有一个 ETL 数据 API 存储库。我们在其中进行所有 etl 处理,然后将数据吐出到 API 中。这些 API 从将资源类传递到服务器以构建 API 的单个命令一次运行一个。资源类位于 __i
我是一名优秀的程序员,十分优秀!