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

112

У меня ситуация, очень похожая на ситуацию с 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 он ищет?

Спасибо, Ларс

РЕДАКТИРОВАТЬ:

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

Ларш
источник
9
нажмите здесь и найдите 64-битную
консоль
1
@KillConsole: спасибо, попробую. Поскольку в загруженном мной установочном пакете были вложенные папки x86 и x64, я предположил, что он включает все, что нужно для 64-разрядной версии. Очевидно нет. Ура, что исправили! Теперь мы переходим к «ImportError: numpy.core.multiarray не удалось импортировать», поэтому я попробую тот же сайт для 64-битного numpy. Если вы превратите свой комментарий в ответ, я проголосую за него и приму его.
LarsH
какую версию Python вы использовали? (не с точки зрения версии битов процессора)
1
@Begueradj: 2.7, если это то, о чем вы спрашиваете.
LarsH 03
1
У меня была такая же проблема, и ни одно из приведенных ниже решений не помогло мне, поэтому оказалось, что я PYTHONPATHиспользовал записи, которые оставила там установка библиотеки SimpleCV. Несмотря на то, что я уже удалил SimpleCV, PYTHONPATHон не был восстановлен и указывал на некоторые каталоги с конфликтующими версиями OpenCV, оставленными установкой SimpleCV. Решение: очистить PYTHONPATH.
Антон Данейко

Ответы:

82

Неофициальные двоичные файлы Windows для пакетов расширения Python

вы можете найти любые библиотеки Python здесь

Убить консоль
источник
это действительно помогло. Я не уверен, что случилось. У меня была версия opencv, anaconda3, python3. Установил opencv_python-3.3.0 + contrib-cp35-cp35m-win_amd64 из приведенного выше списка пакетов и смог успешно импортировать cv2 после нескольких часов борьбы. Благодаря тонну.
emeralddove
42

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

Клайв Вергезе
источник
Как упоминалось в вопросе, я использовал 64-битный Python.
LarsH
18

Вау, я нашел еще один случай этой проблемы. Ничего из вышеперечисленного не помогло. В конце концов, я использовал способность 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
У меня была проблема, когда я пытался полностью запустить версию файла в другой папке. Это решение помогло мне понять, что происходит на самом деле. Спасибо!
Emad Y
3
Это отличный ответ, спасибо! У меня возникла проблема с PyDev, когда он загружал «ctypes» из несовместимой установки python, и я понял, что мне нужно настроить мой интерпретатор для использования WinPython, который исправил его.
eacousineau
7

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

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

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

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

Амальговинус
источник
6

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

оливковое дерево
источник
2

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

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

MatrixManAtYrService
источник
2

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

  1. Я скачал pywin32 Wheel файл из здесь , то

  2. Я удалил модуль pywin32 . Чтобы удалить, выполните следующую команду в командной строке.

    pip uninstall pywin32

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

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

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

Абхишек Кашьяп
источник
2

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

Добавлено кем-то другим, не проверено: я также копирую файл cv2.pydв папку C:/Python27/Lib/site-packages/cv2. Оно работает.

Автономный
источник
1

Для меня проблема заключалась в том, что я использовал разные версии Python в одном проекте Eclipse. Моя установка не соответствовала версиям Python « Свойства проекта» и « Выполнить конфигурацию» .

В Project> Properties> PyDev я установил интерпретатор на Python2.7.11.

В « Конфигурации запуска»> «Интерпретатор» я использовал Интерпретатор по умолчанию. Изменение его на Python 2.7.11 устранило проблему.

Эл Лелопат
источник
1

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

user3233042
источник
1

Итак, у меня возникли проблемы с установкой vtk под Windows (поскольку я использую python 3.7, пока нет доступных двоичных файлов, только для более старых версий python pip install vtk не работает)

Я написал python в своем cmd:

Python 3.7.3 on win32

Итак, теперь я знаю, что у меня есть python 3.7.3, работающий на 32-разрядной версии.

Затем я загрузил нужное колесо с VTK ‑ 8.2.0 ‑ cp37 ‑ cp37m ‑ win32.whl

Затем я установил это колесо:

pip install VTK-8.2.0-cp37-cp37m-win32.whl

Потом протестировал, и все заработало:

python
import vtk
sqp_125
источник
1

Обновите numpy.

pip install numpy --upgrade

Работай на меня !!

Картик Суреш
источник
0

Сначала я скопировал 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
Алиреза
источник
0
  1. Убедитесь, что вы установили python 2.7.12 или более раннюю версию, иначе вы обязательно получите эту ошибку.
  2. Убедитесь, что клиент Oracle установлен на 64-разрядной версии, если ОС 64-разрядная.
  3. Убедитесь, что компилятор Microsoft Visual C ++ для Python 2.7 имеет 64-разрядную версию для 64-разрядной ОС или 32-разрядную версию для 32-разрядной версии. Примечание: - ЕСЛИ у вас 64-битная ОС, установите весь 64-битный пакет или если ОС 32-битная, установите 32-битный пакет.
Ранджан
источник
0

У него очень простое решение. После установки opencv место

cv2.pydот C:\opencv\build\python\2.7\ **x64**доC:\Python27\Lib\site-packages

вместо, место cv2.pydот C:\opencv\build\python\2.7\ **x86**доC:\Python27\Lib\site-packages

Шарат Канти
источник
0

Я получил эту ошибку при попытке импортировать MySQLdb.

Для меня сработало удаление Python, а затем его повторная установка.

Я получил ошибку после установки npm ( https://www.npmjs.com/get-npm ). Единственное, что он сделал, - это установил Python, хотя он у меня уже был.

пользователь984003
источник
0

Это сработало для меня. Я пробовал разные методы, но это было моим лучшим решением.

Откройте командную строку и введите следующее: pip install opencv-python. (убедитесь, что ваш интернет включен). после этого попробуйте импортировать его снова.

user12907613
источник
0

Этот работал со мной

pip install -- pywin32==227
Мохаммед Саид Эль-Шаркави
источник
1
Добро пожаловать в Stack Overflow. Почему это сработало для вас? Не могли бы вы добавить к этому ответу подробности?
Azametzin
-2

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

Майкл Йе
источник