2017-04-06 77 views
1

在我的一些相對較快的Windows機器上,導入SciPy模塊(如scipy.signal)需要很長時間(超過一秒)。爲什麼在Windows上導入一些SciPy模塊需要這麼長時間?

我不能簡單地按Ctrl-C在中間,看看發生了什麼事,賜來福老SciPy的覆蓋堆棧跟蹤:

forrtl: error (200): program aborting due to control-C event 
Image    PC    Routine   Line  Source 
KERNELBASE.dll  00007FFBD9AFD37F Unknown    Unknown Unknown 
KERNEL32.DLL  00007FFBDBE213D2 Unknown    Unknown Unknown 
ntdll.dll   00007FFBDC8C54E4 Unknown    Unknown Unknown 

這並不在我所有的機器發生,雖然。這是怎麼回事?

回答

6

這是一個非常令人沮喪的問題,對我來說,追查,所以我在這裏張貼的解決方案。

我結束了使用Visual Studio的調試器打入程序,看看它在做什麼。

原來有導致此2個正交因素:

  • 對於我無法理解的原因,有些包(S)(我期待在這裏scikits.odes)有有__init__.py的這條線:

    __import__('pkg_resources').declare_namespace(__name__) 
    

    對於我無法理解的原因,一旦scikits.odes是進口的(這SciPy的做了一些奇怪的原因),這條線結束運行,從安裝加載包的數量不敬虔(看起來,大多數,如果不是全部)。安裝越大,增長越慢。

    這個問題的解決方法是卸載此問題的軟件包,或者如果你真的需要它,註釋掉這一行(或做一些等價物),並希望它不會冒犯。

  • 您還沒有將.py文件編譯爲.pyc(在您的Python安裝目錄中運行python -m compileall .)。這實際上有助於很多包。 (我一開始很懷疑。)

解決這兩個問題減少了我的導入時間大約0.3秒,這似乎是正常的。

+0

* 「一旦'scikits.odes'是進口的(這SciPy的做了一些奇怪的原因)」 *你是說SciPy的進口'scikits.odes'?這聽起來不對。 –

+0

@WarrenWeckesser:是的,這是我在說什麼。(https://github.com/scipy/scipy/blob/12b69927915de8401e2db36eac07f91b3aeead9f/scipy/sparse/linalg/dsolve/linsolve.py#L15)去圖。 – Mehrdad

+0

該代碼嘗試導入'scikits.umfpack'。這是否也觸發了'scikits.odes'的導入? –

相關問題