Ошибка Python Weave Blitz - PullRequest
       4

Ошибка Python Weave Blitz

3 голосов
/ 18 ноября 2011

Я пытаюсь использовать 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 ]

5 голосов
/ 05 декабря 2012

Я также использую Python 2.7 64bit / weave.inline под Windows 7 и только что встретил ту же проблему, что вы описали здесь. Я искал весь интернет, но этот пост, похоже, единственный связанный, и я не получил ответа.

Я проследил функцию 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 отличаются в этом или почему без этого модуля импорт показывает такое неоднозначное сообщение. Но поставить его в начале сценария просто у меня.

0 голосов
/ 07 октября 2013

Я прошу прощения за публикацию в такой старой теме, и я не предлагаю рабочее решение или объяснение проблемы, это просто комментарий. ImportError: DLL load failed: Invalid access to memory location. Я столкнулся с той же ошибкой, когда пытался создать собственное расширение Python, запрограммированное в C. 32-битная платформа Windows.

Это была настоящая боль, потому что эта ошибка появлялась случайно в интерактивном, а также в неинтерактивном режиме во всех средах Python (Spyder, Notebook, обычная консоль ...). Я скомпилировал свой код, используя MinGW и дистрибутив Python (команда python setup.py install). Компиляция не выдавала предупреждений или ошибок и выдавала pyd-файл в правильный каталог. Но при попытке импортировать этот модуль import example pro мой код Python он нерегулярно падал (обычно только одна из пяти попыток импорта модуля удалась).

Странно было то, что на другом компьютере это работало просто отлично ... Ну, я наконец-то нашел обходной путь - я скачал более новую версию MinGW (до того, как я использовал версию, которая поставляется в комплекте с дистрибутивом Qt SDK) и скомпилировал модуль снова. Тогда это работало без сбоев. Однако я не нашел никакого систематического решения или объяснения. Так что я могу иметь какое-то отношение к компилятору (может быть, к отсутствию его DLL-файлов? Я точно не знаю), который использовался для генерации pyd-файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...