我正在尝试使用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)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
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.
Run Code Online (Sandbox Code Playgroud)
我正在使用最新的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 interactive,那么在交互模式下输入完全相同的语句,它只是显示
ImportError:DLL加载失败:对内存位置的无效访问.
所以接下来我试着比较输出python -c -v "..."和python -v,最后我能够找到魔鬼不同的行:
import string
我不知道为什么python -c和python交互是不同的这个或为什么没有这个模块导入显示这样一个模糊的消息.但是把它放在脚本的开头只对我有用.