我已经安装了sklearn,并且能够使用命令import sklearn导入sklearn。
然而,我发现sklearn.module_name不能调用sklearn的子模块,例如:
In [1]: import sklearn
In [2]: sklearn.linear_model
Traceback (most recent call last):
File "<ipython-input-2-e64c575ed22e>", line 1, in <module>
sklearn.linear_model
AttributeError: 'module' object has no attribute 'linear_model'同时,我能够直接导入sklearn.linear_model
In [3]: import sklearn.linear_model
In [4]: sklearn.linear_model
Out[4]: <module 'sklearn.linear_model' from
'C:\Users\sng\AppData\Local\conda\conda\envs\python2\lib\site-
packages\sklearn\linear_model\__init__.pyc'>上述情况不正确,例如在matplotlib中:
In [5]: import matplotlib
In [6]: matplotlib.pyplot
Out[6]: <module 'matplotlib.pyplot' from
'C:\Users\sng\AppData\Local\conda\conda\envs\python2\lib\site-
packages\matplotlib\pyplot.pyc'>我很好奇这是怎么回事?这个包裹滑雪板和其他的不同吗?我的IDE是python2.7的Spyder
发布于 2017-10-05 13:06:11
不是的。只是当您调用import matplotlib时,它会在内部导入pyplot,因此您可以按原样使用它,而无需专门导入pyplot。
看看文件的来源。,它是在执行import matplotlib时导入的。它有几句台词,比如:
...
...
from matplotlib.cbook import (
_backports, mplDeprecation, dedent, get_label, sanitize_sequence)
from matplotlib.compat import subprocess
from matplotlib.rcsetup import defaultParams, validate_backend, cycler
...
...其中一些从cbook、compat、rcsetup的导入--我敢肯定--反过来又是从pyplot导入pyplot或类的。
滑雪板的情况并非如此。看看__init__.py of sklearn的来源](.py#L15)
它只有下列进口:
import sys
import re
import warnings
import os
from contextlib import contextmanager as _contextmanager
import logging它根本不使用linear_model,因此出现了错误。
您可以通过导入以下相关包来验证此行为:
import sklearn
import sklearn.svm现在,当您执行sklearn.linear_model时,您将得到正确的输出:
<module 'sklearn.linear_model' from '/usr/local/lib/python2.7/dist-packages/sklearn/linear_model/__init__.pyc'>因为,这一次,至少定义的导入在.使用(导入)某个linear_model类。因此,系统可以使用linear_model。
https://stackoverflow.com/questions/46422646
复制相似问题