Reputation: 429
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?
Upvotes: 8
Views: 2866
Reputation: 22681
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 (like scipy
) import some or all the submodules.
The reason behind this is exemplified by scipy
: in most cases, you will need only one submodule of the scipy
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 load numpy.f2py
, see THIS question/answer for more details.
(*) here I mean an import statement like import scipy
or import scipy as sp
, where a module is loaded. Of course if you write import scipy.optimize
then python will first load the main module, and then the submodule.
Upvotes: 7