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 бит. Я нахожусь на win7 64 бит, у меня есть winpython 2.7.3.3, дистрибутив 64 бит, и я скомпилировал opencv в 64 битах с инструкцией, приведенной здесь, и поместил dll cv2.pyd в папку lib/site-packages на python.

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

Спасибо!!!

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

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

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

8 ответов

Решение

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

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

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

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

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

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

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

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

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

У меня была та же ошибка, что и в предыдущих ответах, но это происходит только тогда, когда я использую pyinstaller.

Я сделал следующее в своем Poetry venv:

poetry run python -m pip install pypiwin32

И это сработало для меня. Я использую

      python                            3.8.10
pyinstaller                       4.7
# Those are the versions that worked for me
pypiwin32                         223
pywin32                           303
pywin32-ctypes                    0.2.0

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

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

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

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

Другие вопросы по тегам