参见英文答案 > Importing packages in Python 5个
当我尝试使用matplotlib的pyplot时:
import matplotlib
print matplotlib.pyplot # just checking
它给了我AttributeError:’module’对象没有属性’pyplot’
它可以通过以下方式解决:
import matplotlib.pyplot
但我真的很困惑的是,
import numpy
print numpy.random
从’/Applications/Canopy.app/appdata/canopy-1.0.3.1262.macosx-x86_64/Canopy.app/Contents/lib/python2.7/site-packages/numpy/random给我< module'numpy.random' /__init__.pyc'\u0026gt; 两种情况有什么区别? pyplot不能在第一个例子中调用,但随机是在第二个例子中.我认为它与某种包和模块有关.但我不是Python的专业人士,因此要求回答.
最佳答案
对于权威教程,read this.
但对于您的具体情况,看起来这就是发生的事情:
每个基于目录的python模块(如matplotlib和numpy)都有一个__init__.py文件,它确定了什么带入了模块的顶级范围.默认情况下(当__init__.py为空时),范围内没有任何内容.
但是,一些模块(如numpy)决定通过向__init__.py添加import语句将功能提升到顶层.即使您只显式导入了numpy,这也会将这些子模块纳入范围.
为了检查我们的假设,让我们来看看源代码!
> matplotlib’s __init__.py
不包括语句import pyplot.
> numpy’s __init__.py
确实包括随机导入,在第176行.