2017-02-15 134 views
2

的自动进口这段代码在我拥有所有的Python环境中失败,但不是在Spyder的:Spyder的子模块

import scipy 
print(scipy.integrate.cumtrapz([1, 2, 3])) 

在大多数环境中,你会得到

AttributeError: module 'scipy' has no attribute 'integrate' 

,除非你做了import scipy.integrate得到子模块进口,但不知何故,在Spyder的这段代码运行没有错误,如果您使用运行配置中的“在当前的Python或IPython的控制台执行”。如果您使用“在新的专用Python控制台中执行”,它会失败。显然,Spyder正在做一些自动导入子模块的工作,但我无法在任何地方找到这种行为。

问题是什么是Spyder在做什么,这是在哪里记录,如何关闭它。

环境:蟒蛇3(4.3.0),Spyder的3.1.2,Python的3.5

回答

1

您可以从IPython的控制台Python的控制台(这是一个不同的标签页里面)切换。问题是IPython以不同的模式(即“matplotlib”模式)加载了很多东西,而这些东西加载了很多东西。控制这一点基本上是不可能的。

enter image description here

但也有一定的方法来修改Tools -> Preferences -> IPython console下IPython的启动,但我不知道你是否能有禁用SciPy进口。

+0

我还以为是自动进口,但如果你离开了SciPy的进口,代码失败。所以比这更微妙。 – chthonicdaemon

+0

@chthonicdaemon如果你尝试'import sys;打印(排序(sys.modules.keys()))'你得到所有加载的模块。重要的是要知道,进口并不意味着你可以在解释使用它(因为它是在其他范围/命名空间加载),它只是意味着它在任何位置加载是非常重要的。 – MSeifert

+0

那接近答案了。我在仍然有兴趣,为什么/如何,如果我不'进口scipy'代码会失败,但如果我这样做会成功,但我不'进口scipy.integrate' – chthonicdaemon