2017-02-15 135 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