2017-05-09 63 views
1

我对python不是很熟悉。我在python 3.5上使用scikit-learn。这可能是一个天真的问题。为什么python pacakge在Python 3.5中显示为模块?

site-pacakges\sklearn文件夹中,我可以看到__init__.py文件。因此根据docsklearn应该是。但是当我运行下面的代码时,它说sklearn模块

In [21]: sklearn 
Out[21]: <module 'sklearn' from '/home/python35/lib/site-packages/sklearn/__init__.py'> 

它不应该是package 'sklearn'而不是module 'sklearn'

回答

4

所有Python包是module类型。

docs

从技术上讲,一个包是一个Python模块与__path__属性。

>>> import numpy # numpy package 
>>> type(numpy) 
<type 'module'> 
>>> numpy.__path__ 
['/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy'] 
>>> 
>>> import collections # collections module 
>>> collections.__path__ 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'module' object has no attribute '__path__' 
+0

谢谢。那么为什么模块没有'__path ___'属性呢?据我所知,一个模块是'.py'文件,一个包是一个包含多个'.py'文件的文件夹,其中有'__init __。py'文件。既然文件夹和文件都有路径,我认为包和模块**都可以具有'__path__'属性。 – smwikipedia

+1

可能因为Python中的路径与文件(模块)有关的目录(包)更多。此外,大多数模块已经具有'__file__'属性。 –

1

难道不是包'sklearn'而不​​是模块'sklearn'吗?

编号A包中包含多个模块(例如一个目录包含多个文件)