Python编织闪电战DLL错误

时间:2011-11-18 18:04:33

标签: python scipy

我正在尝试使用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中编写代码;不确定这与它有什么关系。有什么想法吗?

2 个答案:

答案 0 :(得分: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 interactive,那么在交互模式下输入完全相同的语句,它只显示

  

ImportError:DLL加载失败:对内存位置的访问无效。

接下来我尝试比较python -c -v "..."python -v的输出,最后我能够找到魔鬼的不同行:

<强> import string

我不知道为什么python -cpython互动在这方面有所不同,或者为什么没有这个模块导入显示这样一个模棱两可的消息。但是把它放在脚本的开头只对我有用。

答案 1 :(得分:0)

我很抱歉发布到这样一个旧线程,我不提供有效的解决方案或解决问题,这只是一个评论。 ImportError: DLL load failed: Invalid access to memory location.我尝试在C. Platform Windows 32-bit中编写自己的Python扩展时遇到了同样的错误。

这是一个真正的痛苦,因为在所有Python环境(Spyder,Notebook,普通控制台......)中,此错误在交互式和非交互式模式中随机出现。我使用MinGW和Python的distutils(命令python setup.py install)编译了我的代码。编译没有发出警告或错误,并将pyd文件生成到正确的目录中。但是当试图导入这个模块import example时,我的Python代码不规则地崩溃了(通常只有五分之一的尝试导入模块成功)。

奇怪的是,在另一台计算机上它工作得很好......好吧,我终于找到了一个解决方法 - 我下载了一个较新版本的MinGW(在我使用Qt SDK发行版中包含的版本之前)并编译了模块再次。然后它没有更多的崩溃工作。但是我没有找到任何系统的解决方案或解释。所以我可能与编译器有关(可能没有它的DLL?我不确切知道)用于生成pyd文件。