ImportError: Ошибка загрузки DLL:% 1 не является допустимым приложением Win32. Но DLL есть

У меня ситуация очень похожа на ситуацию в ImportError: загрузка DLL не удалась:% 1 не является допустимым приложением Win32, но ответ там не работает для меня.

Мой код Python говорит:

import cv2

Но эта строка выдает ошибку, указанную в заголовке этого вопроса.

У меня установлен OpenCV в C:\lib\opencv на этой 64-разрядной машине. Я использую 64-битный Python.

Моя переменная PYTHONPATH: PYTHONPATH=C:\lib\opencv\build\python\2.7. Эта папка содержит cv2.pyd и все.

Моя переменная PATH: Path=%OPENCV_DIR%\bin;... Эта папка содержит 39 DLL файлов, таких как opencv_core246d.dll.

OPENCV_DIR имеет следующее значение: OPENCV_DIR=C:\lib\opencv\build\x64\vc11.

Решение в ImportError: загрузка DLL не удалась:% 1 не является допустимым приложением Win32 говорит, чтобы добавить "новый путь двоичных файлов opencv (C:\opencv\build\bin\Release) к Переменная среды Windows PATH". Но, как показано выше, у меня уже есть папка с двоичными файлами OpenCV (C:\lib\opencv\build\x64\vc11\bin) в моем PATH. И моя установка OpenCV не имеет каких-либо папок Release (кроме пустого в build/java).

Любые идеи относительно того, что происходит не так? Могу ли я сказать Python для подробного отслеживания процесса загрузки? То, что ищет DLL?

Спасибо, Lars

EDIT:

Я только заметил, что согласно http://www.dependencywalker.com/, cv2.pyd в C:\lib\opencv\build\python\2.7 - 32-разрядный, тогда как машина и Python, который я запускаю, является 64-битным. Может ли это быть проблема? И если да, где я могу найти 64-битную версию cv2.pyd?

Ответ 2

Пожалуйста, проверьте, является ли используемая версия python 64-разрядной. Если нет, это может быть проблемой. Вы использовали бы 32-битную версию python и установили 64-битные двоичные файлы для библиотеки OPENCV.

Ответ 3

Вау, я нашел еще один случай для этой проблемы. Ничего из этого не произошло. В конце концов я использовал способность python для того, чтобы заглянуть в то, что было загружено. Для python 2.7 это означает:

import imp
imp.find_module("cv2")

Это оказалось совершенно неожиданным "cv2.pyd" файлом в каталоге DLL Anaconda, который не был затронут несколькими попытками удаления/установки. Сначала Python смотрел туда и не нашел моей хорошей установки. Я удалил этот файл cv2.pyd и снова попробовал imp.find_module ( "cv2" ), и python сразу же нашел нужный файл, а cv2 начал работать.

Итак, если ни одно из других решений не работает для вас, убедитесь, что вы используете интроспекцию python, чтобы узнать, что пытается загрузить файл python.

Ответ 4

В моем случае у меня 64-битный python, и это был неправильный вариант lxml - я тоже должен был использовать версию x64. Я решил это, загрузив здесь 64-разрядную версию lxml:

https://pypi.python.org/pypi/lxml/3.4.1

lxml-3.4.1.win-amd64-py2.7.exe

Это был самый простой ответ на неприятную проблему.

Ответ 5

У меня просто была эта проблема, она поворачивается, потому что я использовал x64-версию файла opencv. Пробовал x86, и он работал.

Ответ 6

Я скопировал cv2.pyd файл из папки /opencv/build/python/2.7/x86 вместо папки /x64 в C:/Python27/Lib/site-packeges. Я следил за инструкциями здесь.

Ответ 7

Для меня проблема заключалась в том, что я использовал разные версии Python в одном проекте Eclipse. Моя настройка не соответствовала параметрам Project Properties и Run Configuration Python.

В Project > Properties > PyDev у меня установлен Interpreter на Python2.7.11.

В Run Configurations > Interpreter я использовал интерпретатор по умолчанию. Изменение его на Python 2.7.11 устранило проблему.

Ответ 8

Если ваша системная система (CMake в моем случае) копирует файл с <name>.dll до <name>.pyd, вы получите эту ошибку, если исходный файл не был фактически dll. В моем случае создание разделяемых библиотек было отключено, поэтому основной файл был фактически *.lib.

Я обнаружил эту ошибку, загрузив файл pyd в DependencyWalker и обнаружив, что он недействителен.

Ответ 9

У меня была та же проблема. Вот что я сделал:

  • Я загрузил файл колеса pywin32 из здесь, затем

  • Я удалил модуль pywin32. Для удаления выполните следующую команду в командной строке.

    pip uninstall pywin32

  • Затем я переустановил pywin32. Чтобы установить его, откройте командную строку в том же каталоге, где находится файл колеса pywin32. Затем выполните следующую команду.

    pip install <Name of the wheel file with extension> Файл колеса будет выглядеть следующим образом: piwin32-XXX-cpXX-none-win32.whl

Он разрешает проблему для меня. Вы также можете попробовать. Надеюсь, что это сработает и для вас.

Ответ 10

У меня возникла такая же проблема, когда я удалил и переустановил другую версию 2.7.x Python в своей системе с помощью 32-разрядного установщика Windows. Я получил ту же ошибку в большинстве моих операторов импорта. Я удалил недавно установленный Python и загрузил 64-разрядный установщик Windows и снова установил Python, и он сработал. Надеюсь, это поможет вам.

Ответ 11

Сначала я скопировал cv2.pyd от /opencv/build/python/2.7/x86 до C:/Python27/Lib/site-packeges. Ошибка была

"RuntimeError: модуль скомпилирован против API версии 9, но эта версия numpy равна 7"

Затем я установил numpy-1.8.0-win32-superpack-python2.7.exe, а opencv отлично работает.

>>> import cv2
>>> print cv2.__version__
2.4.13

Ответ 13

  • Пожалуйста, убедитесь, что вы установили версию python 2.7.12 или ниже, иначе вы получите эту ошибку.
  • Убедитесь, что клиент Oracle установлен на 64 бита, если OS 64 бит.
  • Убедитесь, что компилятор Microsoft Visual С++ для Python 2.7 равен 64 для бит для 64-разрядных ОС или 32 бит для 32 бит. Примечание: - Если ур ОС 64-битный, установите весь пакет из 64 бит или если Os 32-битный 32-разрядный пакет установки.

Ответ 14

Я нашел решение, возможно, вы можете попытаться использовать окно cmd, а не окно подсказки anaconda, чтобы начать первый скрининг-тест.