【问题标题】:Python3: different behaviour between import and importlib.import_module?Python3:import 和 importlib.import_module 之间的不同行为?
【发布时间】:2018-05-26 11:38:27
【问题描述】:

我无法动态导入在代码中导入没有问题的模块,但我不知道为什么。

我有以下几点:

> ls lib
__init__.py     main.py

初始化文件为空。以下作品:

> python3
Python 3.4.3 (default, Oct 14 2015, 20:28:29)
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import lib.main
>>> lib.main.sayyay()
yay

以下不起作用:

> python3
Python 3.4.3 (default, Oct 14 2015, 20:28:29)
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import importlib
>>> importlib.import_module("lib.main")
<module 'lib.main' from '/some/path/lib/main.py'>
>>> lib.main.sayyay()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'lib' is not defined

我确实阅读了 importlib 文档以及关于 SO 的几个答案,例如 How to import a module in Python with importlib.import_moduleDynamically import a method in a file, from a string

但我错过了什么?

【问题讨论】:

    标签: python-3.x python-import python-importlib


    【解决方案1】:

    import_module 返回导入的模块。 因此,您需要为导入的模块命名并像lib.main一样使用它

    >>> lib_main = importlib.import_module("lib.main")
    >>> lib_main.sayyay()
    

    【讨论】:

    • 哦,这出乎意料。但我明白这有什么用处。谢谢。
    猜你喜欢
    • 2011-06-01
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    • 1970-01-01
    • 2018-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多