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

У меня есть проблема, когда я пытаюсь импортировать cv2 на python и получаю следующее сообщение об ошибке.

>>> import cv2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: DLL load failed: %1 is not a valid Win32 application.

Я понимаю, что есть много сообщений об этом, где предполагается, что битность пакета отличается от пакета python.

Тем не менее, все, что я запускаю, является 64-битным. У меня 64-разрядная версия Win7, у меня winpython 2.7.3.3, 64-битный дистрибутив, и я скомпилировал 64-битный opencv с предоставленной инструкцией здесь и поместил dll cv2.pyd в папку Lib/site-packages python.

К сожалению, предложение использовать 32-битную версию Python больше не работает для меня, так как мне приходится обрабатывать массивы numpy, слишком большие для 32-битных.

Спасибо!!!

------ ОБНОВИТЬ

Единственное, чего не хватало, это добавить новый путь к двоичным файлам opencv (C:\opencv\build\bin\Release) в переменную среды Windows PATH, перезапустить python.

Кажется, теперь все работает нормально!


person Francis    schedule 31.01.2013    source источник


Ответы (7)


Сообщение ImportError немного вводит в заблуждение из-за ссылки на Win32, тогда как проблема заключалась просто в том, что библиотеки DLL opencv не были найдены.

Эта проблема была решена путем добавления пути к двоичным файлам opencv в переменную среды Windows PATH (например, на моем компьютере этот путь: C:\opencv\build\bin\Release).

person Francis    schedule 23.07.2013
comment
Какие шаги предприняты для этого? - person Exzile; 07.07.2014
comment
Чего я не понимаю, так это почему в сообщении об ошибке не указывается DLL, которую невозможно загрузить? %1 просто кажется заполнителем для имени DLL. - person antred; 19.11.2014
comment
Ах хорошо. Поэтому вам нужно скопировать cv2.pyd из папки x64, если вы работаете на 64-битной машине, чтобы исправить эту ошибку. @antred Это заполнитель. Обычно ее заменяют DLL, но она не работает, потому что 32-разрядная версия не загружается на 64-разрядную машину. - person Alex W; 16.04.2015
comment
@Francis: Вы, сэр, заслуживаете медали! Спасибо, правда. - person Shail; 05.05.2015
comment
@AlexW Вы говорите, что cv2.pyd нужно скопировать ... но куда его скопировать? - person Belial; 01.07.2015
comment
@Belial Я не на той машине, на которой я установил OpenCV прямо сейчас, но я считаю, что вам нужно скопировать этот файл из 64-битной папки в C:\opencv\build\bin\Release в 32-битную папку. - person Alex W; 01.07.2015
comment
На вашем компьютере также могут быть 32-битные файлы .dll. Обязательно удалите их, если они вам не нужны. - person Ramesh-X; 10.06.2017

Вы можете попробовать установить 32-битную версию opencv

person Oladapo Omonayajo    schedule 14.06.2013
comment
Обратите внимание, что эта проблема уже решена, как указано в разделе ОБНОВЛЕНИЕ вопроса. - person Francis; 04.07.2013
comment
@Francis, как только вы нашли решение, всегда добавляйте его в качестве ответа, а не добавляйте его в свой вопрос. - person tshepang; 23.07.2013

Я только что нажал это, и проблема заключалась в том, что пакет в какой-то момент был установлен в каталоге пакетов для каждого пользователя. (В Windows.) Он же %AppData%\Python. Итак, Python сначала искал там, нашел старую 32-битную версию файла .pyd и потерпел неудачу с указанной ошибкой. К сожалению, удаления pip самого по себе было недостаточно, чтобы очистить это, и в настоящее время pip 10.0.1, похоже, не имеет параметра --user для удаления, только для установки.

tl;dr Удаление старого .pyd из %AppData%\python\python27\site-packages решило эту проблему для меня.

person Mark Allen    schedule 25.04.2018
comment
Это была и моя проблема. Была более старая версия python, которая, похоже, не была удалена должным образом. Пришлось запустить средство проверки системных файлов, чтобы очистить его. - person Rhino; 21.03.2020

Или вам нужно пересобрать модуль cv2 для win 64bit.

person lukenothing    schedule 20.11.2013

Все, что вам нужно сделать, это скопировать файл cv2.pyd из папки x86 (например, C:\opencv\build\python\2.7\x86\) в C:\Python27\Lib. \site-packages\ , а не из папки x64.

Надеюсь, это поможет вам.

person Jhossep Augusto Popayán Avila    schedule 09.12.2015

Эта ошибка также может появляться при смешанном использовании версий Python:

Например, если какая-либо загружаемая DLL была скомпилирована с использованием Python 2.7.16, а вы пытаетесь импортировать ее с помощью Python 2.7.15, выдается эта ошибка ImportError: DLL load failed: %1 is not a valid Win32 application..

По крайней мере, это то, что я нашел проблемой в моем случае.

person MartinD    schedule 21.01.2020

Когда у меня была эта ошибка, она исчезла после того, как мой компьютер вышел из строя и перезагрузился. Попробуйте закрыть и снова открыть IDE, если это не сработает, попробуйте перезагрузить компьютер. Я только что установил библиотеки в тот момент, не перезапуская pycharm, когда получил эту ошибку.

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

person Nick Brady    schedule 08.09.2015