I am using scipy and numpy through Anaconda 2.1.0 distribution. I use Spyder as my Python IDE.
When I run import scipy as sp
, I can't access the subpackages, such as optimize, linalg, cluster etc. through sp.
However, when I run import numpy as np
, I am able to access all its subpackages, such as linalg, random, matrixlib, polynomial, testing, etc. through np
.
Is there a reason why the two imports work in different ways? Why does import scipy as sp
not grab all scipy subpackages into sp
's namespace?
This possibility of different import behaviour occurs by design of the python language.
An import statement of a module(*) by default only imports the main module, and not the submodules. The main module may (like in the case of
numpy
) , or may not (likescipy
) import some or all the submodules.The reason behind this is exemplified by
scipy
: in most cases, you will need only one submodule of thescipy
package. This default behaviour will not hang the interpreter at loading submodules that are unnecessary to your code.EDIT: Notice that
numpy
does not import by default all the submodules, for example it does not loadnumpy.f2py
, see THIS question/answer for more details.(*) here I mean an import statement like
import scipy
orimport scipy as sp
, where a module is loaded. Of course if you writeimport scipy.optimize
then python will first load the main module, and then the submodule.