Python3:import和importlib.import_module之间的不同行为?

时间:2017-12-12 17:40:37

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

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

我有以下内容:

> ls lib
__init__.py     main.py

init文件为空。以下作品:

> 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

我确实在SO上阅读了importlib文档以及一些答案,例如How to import a module in Python with importlib.import_moduleDynamically import a method in a file, from a string

但是我错过了什么?

1 个答案:

答案 0 :(得分:2)

import_module返回导入的模块。 因此,您需要为导入的模块指定名称,并使用此名称lib.main

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