2016-07-11 60 views
1

this answer,你可以使用相對導入像這樣使用importlibimport_modulePython的導入庫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 
+0

你是什麼意思的「不工作」? – cdonts

回答

2

父模塊需要努力的相對導入之前進口。

如果你想讓它工作,你必須在你調用import_module之前添加ìmport sklearn.feature_extraction

這裏很好的解釋:https://stackoverflow.com/a/28154841/1951430

+0

'importlib.import_module()'的意義和目的是什麼?如果我必須導入'sklearn.feature_extraction',爲什麼我不只是在文件的頭部導入'sklearn.feature_extraction.text'?你有什麼時候使用'importlib.import_module'的好用例嗎? – Jarad

+0

importlib只是在python代碼中提供了import語句的功能。 – jobou