Python importlib import_module模块的相对导入

Python importlib import_module Relative Import of Module

根据这个答案,您可以使用importlibimport_module,使用类似这样的相对导入:

1
importlib.import_module('.c', 'a.b')

为什么sklearn.feature_extraction.text的相对导入不起作用?

1
importlib.import_module('.text', 'sklearn.feature_extraction')

我验证了text是一个具有以下功能的模块:

1
2
3
from types import ModuleType
import sklearn.feature_extraction.text
isinstance(sklearn.feature_extraction.text, ModuleType)

退换商品

1
True

编辑

"不起作用",我的意思是它不导入模块。

我使用的是python 3.4

绝对方式工作:

1
2
3
import importlib
text = importlib.import_module('sklearn.feature_extraction.text')
tfidf = text.TfidfVectorizer()

相对方式不:

1
2
3
4
5
6
7
8
9
10
import importlib
text = importlib.import_module('.text', 'sklearn.feature_extraction')
Traceback (most recent call last):
  File"<pyshell#28>", line 1, in <module>
    text = importlib.import_module('.text', 'sklearn.feature_extraction')
  File"C:\Python34\lib\importlib\__init__.py", line 109, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File"<frozen importlib._bootstrap>", line 2249, in _gcd_import
  File"<frozen importlib._bootstrap>", line 2199, in _sanity_check
SystemError: Parent module 'sklearn.feature_extraction' not loaded, cannot perform relative import


在尝试相对导入之前,需要导入父模块。

如果您希望导入模块工作,您必须在调用import模块之前添加import sklearn.feature_extraction

这里的解释很好:https://stackoverflow.com/a/28154841/1951430