Python weave blitz DLL 错误

标签 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 中编写代码;不确定这是否与它有关。有什么想法吗?

最佳答案

我也在 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 load failed: Invalid access to memory location.

所以接下来我尝试比较 python -c -v "..."python -v 的输出,最后我找到了不同的地方行:

导入字符串

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

关于Python weave blitz DLL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8186911/

相关文章:

python - 创建一个可以被 conda 环境中的 jupyter Notebook 理解的 python 模块

python - 将通用异常传递给重试模块

python - 将 MongoEngine 文档作为 JSON 返回

python - cython 中没有 python 对象的高效矩阵运算

python - scipy.io.loadmat 嵌套结构(即字典)

python - 在保持值(value)的同时在循环内进行比较

python - 具有重复约束的洗牌列表 2-back python

python - numpy 中的 sin 函数如何工作?

python - 拟合两个不同区域内的实验数据

Python:随着时间的推移将相同的对象分配给相同的标签