从模块导入vs导入big_module [python]

时间:2014-07-22 02:24:32

标签: python scikit-learn

出于某种原因,这有效:

from sklearn import svm

但是这个不是

import sklearn  

sklearn.svm.LinearSVC()

说模块svm不是sklearn的子模块。

它们不应该是同一个东西吗?

2 个答案:

答案 0 :(得分:4)

我已经创建了一个文件系统布局如下。

[9:29pm][wlynch@watermelon layout] tree
.
├── __init__.py
└── sklearn
    ├── __init__.py
    └── svm
        └── __init__.py

[9:31pm][wlynch@watermelon layout] cat __init__.py 
[9:31pm][wlynch@watermelon layout] cat sklearn/__init__.py
[9:31pm][wlynch@watermelon layout] cat sklearn/svm/__init__.py
def LinearSVC():
    pass

让我们运行python

[9:29pm][wlynch@watermelon layout] python
Python 2.7.5 (default, Mar  9 2014, 22:15:05) 
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sklearn
>>> sklearn.svm
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'svm'

>>> import sklearn.svm
>>> sklearn.svm.LinearSVC()
>>>

通常,python库设计人员会通过sklearn/__init__.py包含行import svm来解决此问题。

答案 1 :(得分:0)

如果svm是sklearn中的变量,则第一个代码有效。或者svm是sklearn的子模块

from sklearn import svm

第二个代码仅在sklearn导入svm并将其作为变量包含在其命名空间

中时才有效
import sklearn
sklearn.svm.LinearSVC()