关于python 3.x:Python3:import和importlib.import_module之间的不同行为?

Python3: different behaviour between import and importlib.import_module?

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

我有以下几点:

1
2
> ls lib
__init__.py     main.py

init文件为空。以下工作:

1
2
3
4
5
6
7
> 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

以下内容不起作用:

1
2
3
4
5
6
7
8
9
10
11
> 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文档以及下面的几个答案,例如,如何使用importlib.import_模块在python中导入模块,以及从字符串动态导入文件中的方法。

但我错过了什么?


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

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