2011-11-18 31 views
3

我想使用weave.blitz來加速一些代碼,我不斷收到以下DLL錯誤。如果我運行一個簡單的代碼,例如Python weave blitz DLL錯誤

from scipy import * # or from NumPy import * 
a = ones((512,512),'Float64') 
b = ones((512,512),'Float64') 

# now average 
a[1:-1,1:-1] = (b[1:-1,1:-1] + b[2:,1:-1] + b[:-2,1:-1] \ 
+ b[1:-1,2:] + b[1:-1,:-2])/5. 

from scipy import weave 
expr = "a[1:-1,1:-1] = (b[1:-1,1:-1] + b[2:,1:-1] + b[:-2,1:-1]" \ 
    "+ b[1:-1,2:] + b[1:-1,:-2])/5." 
weave.blitz(expr) 

我得到以下錯誤:

Traceback (most recent call last): 
    File "C:\Users\Thijs\wtest.py", line 19, in <module> 
    weave.blitz(expr) 
    File "C:\Python27\lib\site-packages\scipy\weave\blitz_tools.py", line 65, in blitz 
    **kw) 
    File "C:\Python27\lib\site-packages\scipy\weave\inline_tools.py", line 488, in compile_function 
exec 'import ' + module_name 
    File "<string>", line 1, in <module> 
ImportError: DLL load failed: Invalid access to memory location. 

我使用的是最新的Pythonxy和我平時寫我的代碼在Spyder的;不知道這與它有什麼關係。有任何想法嗎?

回答

5

我也在Windows 7下使用python 2.7 64bit/weave.inline,只是遇到了與你在這裏描述的相同的問題。我搜索了整個互聯網,但這篇文章似乎是唯一相關的,我沒有回答。

我追蹤了weave.inline函數並嘗試從編譯好的二進制文件中加載pyd。然後我發現加載成功,如果我嘗試

python -c "import sys; sys.path.insert(0, 'C:\\Users\\zliu\\AppData\\Local\\Temp\\zliu\\python27_compiled'); import sc_d4c0ee9cff8db6a9b5fc8352299944210;"其中模塊名稱顯然是一些散列值。

但是如果我開始Python交互然後輸入交互模式完全一樣的語句,它只是顯示

ImportError: DLL load failed: Invalid access to memory location.

所以下次我試圖比較python -c -v "..."python -v輸出,最後我能夠找到魔鬼不同的線路:

import string

我不知道爲什麼python -cpython互動是不同的在這個或爲什麼沒有這個模塊導入顯示這樣一個模棱兩可的消息。但把它放在腳本的開頭就適合我。

0

我很抱歉張貼到這樣一箇舊的線程,我不提供工作的解決方案或exaplantion的問題,它只是一個評論。 ImportError: DLL load failed: Invalid access to memory location.當我嘗試使用C編寫的自己的Python擴展程序時遇到了同樣的錯誤。平臺Windows 32位。

這是一個真正的痛苦,因爲這個錯誤在所有Python環境(Spyder,Notebook,純控制檯...)中以交互式以及非交互式模式隨機出現。我使用MinGW和Python的distutils(命令python setup.py install)編譯我的代碼。編譯沒有給出警告或錯誤,並生成pyd文件到正確的目錄。但是當試圖導入這個模塊import example贊成我的Python代碼它不規則地崩潰(通常只有五次嘗試導入模塊成功)。

奇怪的是,在另一臺電腦上它工作得很好......嗯,我終於找到了一個解決方法 - 我下載了一個較新版本的MinGW(在我使用Qt SDK發行版中包裝的版本之前)模塊。然後它不再發生崩潰。但是我沒有找到任何系統的解決方案或解釋。所以我可能與編譯器有關(可能缺少它的DLL?我不知道)是用來生成pyd文件的。