Python importlib import_module Относительный импорт модуля

Согласно этому ответу, вы можно использовать от importlib до import_module, используя относительный импорт, например:

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

Почему не работает относительный импорт для sklearn.feature_extraction.text?

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

Я проверил, что text - это модуль с:

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

Возврат

True

Изменить

Под «не работает» я имею в виду, что модуль не импортируется.

Я использую Python 3.4

Абсолютный способ работает:

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

Относительный способ:

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

person Jarad    schedule 11.07.2016    source источник
comment
Что вы имеете в виду под словом «не работает»?   -  person cdonts    schedule 11.07.2016


Ответы (1)


Перед выполнением относительного импорта необходимо импортировать родительский модуль.

Вам нужно будет добавить import sklearn.feature_extraction перед вызовом import_module, если вы хотите, чтобы он работал.

Хорошее объяснение здесь: https://stackoverflow.com/a/28154841/1951430

person jobou    schedule 11.07.2016
comment
В чем тогда смысл и цель importlib.import_module()? Если мне все равно придется импортировать sklearn.feature_extraction, почему бы мне просто не импортировать sklearn.feature_extraction.text в заголовке файла? У вас есть хороший пример того, когда использовать importlib.import_module? - person Jarad; 11.07.2016
comment
importlib просто предоставляет функцию оператора импорта в коде Python. - person jobou; 11.07.2016