ImportError: Falha ao carregar DLL:% 1 não é um aplicativo Win32 válido. Mas as DLLs estão lá

112

Tenho uma situação muito parecida com a de ImportError: Falha no carregamento da DLL:% 1 não é um aplicativo Win32 válido , mas a resposta não está funcionando para mim.

Meu código Python diz:

import cv2

Mas essa linha lança o erro mostrado no título desta pergunta.

Tenho o OpenCV instalado C:\lib\opencvnesta máquina de 64 bits. Estou usando Python de 64 bits.

Meu variável PYTHONPATH: PYTHONPATH=C:\lib\opencv\build\python\2.7. Esta pasta contém cv2.pyde isso é tudo.

Minha variável PATH: Path=%OPENCV_DIR%\bin;...esta pasta contém 39 arquivos DLL, como opencv_core246d.dll.

OPENCV_DIR tem este valor: OPENCV_DIR=C:\lib\opencv\build\x64\vc11.

A solução em ImportError: Falha no carregamento da DLL:% 1 não é um aplicativo Win32 válido que diz para adicionar "o novo caminho dos binários opencv ( C:\opencv\build\bin\Release) à variável de ambiente PATH do Windows". Mas, como mostrado acima, já tenho a pasta de binários do OpenCV ( C:\lib\opencv\build\x64\vc11\bin) em meu PATH. E minha instalação do OpenCV não tem nenhuma pasta Release (exceto por uma vazia em build / java).

Alguma ideia do que está acontecendo de errado? Posso dizer ao Python para rastrear detalhadamente o processo de carregamento? Exatamente que DLL ele está procurando?

Obrigada lars

EDITAR:

Acabei de notar que, de acordo com http://www.dependencywalker.com/ , o cv2.pydin C:\lib\opencv\build\python\2.7é de 32 bits, enquanto a máquina e o Python que estou executando são de 64 bits. Será esse o problema? E em caso afirmativo, onde posso encontrar uma versão de 64 bits do cv2.pyd?

LarsH
fonte
9
clique aqui e encontre o opencv de 64 bits
Kill Console
1
@KillConsole: obrigado, vou tentar. Como o pacote de instalação que baixei tinha subpastas x86 e x64, presumi que incluía tudo que era necessário para 64 bits. Aparentemente não. Hooray, isso consertou! Agora estamos em "ImportError: numpy.core.multiarray falhou ao importar", então tentarei o mesmo site para numpy de 64 bits. Se você fizer seu comentário em uma resposta, irei votar a favor e aceitá-lo.
LarsH
qual versão do Python você usou? (não em termos de versão de bits do processador)
1
@Begueradj: 2.7, se é isso que você está perguntando.
LarsH
1
Eu tive o mesmo problema e nenhuma das soluções abaixo me ajudou, então descobri que meu PYTHONPATHcostumava conter as entradas que a instalação da biblioteca SimpleCV deixou lá. Apesar de já ter desinstalado o SimpleCV, PYTHONPATHele não foi restaurado e estava apontando para alguns diretórios com versões conflitantes do OpenCV deixadas pela instalação do SimpleCV. Solução: limpe o PYTHONPATH.
Anton Daneyko

Respostas:

81

Binários não oficiais do Windows para pacotes de extensão Python

você pode encontrar qualquer biblioteca python a partir daqui

Kill Console
fonte
isso realmente ajudou. Não tenho certeza do que estava errado. Eu tinha uma versão do opencv, anaconda3, python3. Opencv_python-3.3.0 + contrib-cp35-cp35m-win_amd64 instalado da lista de pacotes acima e foi capaz de importar o cv2 com sucesso após horas de luta. Muito obrigado.
emeralddove
41

Verifique se a versão do python que você está usando também é de 64 bits. Se não, esse poderia ser o problema. Você estaria usando uma versão python de 32 bits e instalaria binários de 64 bits para a biblioteca OPENCV.

Clive Verghese
fonte
Conforme mencionado na pergunta, eu estava usando Python de 64 bits.
LarsH de
17

Uau, encontrei mais um caso para esse problema. Nenhuma das opções acima funcionou. Eventualmente, usei a capacidade do python para introspectar o que estava sendo carregado. Para python 2.7, isso significa:

import imp
imp.find_module("cv2")

Isso resultou em um arquivo "cv2.pyd" completamente inesperado em um diretório DLL do Anaconda que não foi tocado por múltiplas tentativas de desinstalação / instalação. Python estava procurando lá primeiro e não encontrando minha boa instalação. Excluí aquele arquivo cv2.pyd e tentei imp.find_module ("cv2") novamente e o python imediatamente encontrou o arquivo certo e o cv2 começou a funcionar.

Portanto, se nenhuma das outras soluções funcionar para você, certifique-se de usar a introspecção python para ver qual arquivo o python está tentando carregar.

Ezekiel Kruglick
fonte
4
Eu tive um problema onde ele estava tentando executar uma versão do arquivo em uma pasta completamente diferente. Essa solução aqui me ajudou a descobrir o que realmente estava acontecendo. Obrigado!
Emad Y
3
Esta é uma excelente resposta, obrigado! Tive um problema com o PyDev em que ele carregava "ctypes" de uma instalação incompatível do python e percebi que precisava configurar meu interpretador para usar o WinPython, que corrigiu o problema.
eacousineau de
7

No meu caso, tenho python de 64 bits e lxml é a versão errada - eu deveria estar usando a versão x64 disso também. Resolvi isso baixando a versão de 64 bits do lxml aqui:

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

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

Essa foi a resposta mais simples para um problema frustrante.

Amalgovinus
fonte
6

Acabei de ter esse problema, acontece que era só porque eu estava usando a versão x64 do arquivo opencv. Tentei o x86 e funcionou.

Oliveira
fonte
2

Se o seu sistema de compilação (CMake no meu caso) copiar o arquivo de <name>.dllpara <name>.pyd, você obterá esse erro se o arquivo original não for realmente uma dll. No meu caso, a construção de bibliotecas compartilhadas foi desativada, então o arquivo subjacente era na verdade um*.lib .

Eu descobri esse erro carregando o pydarquivo no DependencyWalker e descobrindo que ele não era válido.

MatrixManAtYrService
fonte
2

Eu tive o mesmo problema. Aqui está o que eu fiz:

  1. Eu baixei o arquivo pywin32 Wheel daqui , então

  2. Desinstalei o módulo pywin32 . Para desinstalar, execute o seguinte comando no Prompt de Comando.

    pip uninstall pywin32

  3. Então, eu reinstalei o pywin32 . Para instalá-lo, abra o Prompt de Comando no mesmo diretório onde se encontra o arquivo pywin32 wheel. Em seguida, execute o seguinte comando.

    pip install <Name of the wheel file with extension> O arquivo da roda será como: piwin32-XXX-cpXX-none-win32.whl

Isso resolve o problema para mim. Você também pode tentar. Espero que funcione para você também.

Abhishek Kashyap
fonte
2

Copiei o cv2.pydarquivo da /opencv/build/python/2.7/x86pasta em vez de da /x64pasta para C:/Python27/Lib/site-packeges. Eu segui o resto das instruções fornecidas aqui .

Adicionado por outra pessoa, não verificado: Eu também copio o arquivo cv2.pydpara a pasta C:/Python27/Lib/site-packages/cv2. Funciona.

Autônomo
fonte
1

Para mim, o problema era que eu estava usando versões diferentes do Python no mesmo projeto Eclipse. Minha configuração não era consistente com as versões do Python Propriedades do projeto e Executar configuração .

Em Projeto> Propriedades> PyDev , tive o Interpreter definido como Python2.7.11.

Em Run Configurations> Interpreter , estava usando o Default Interpreter. Mudá-lo para Python 2.7.11 corrigiu o problema.

Al Lelopath
fonte
1

Eu enfrentei o mesmo problema quando desinstalei e reinstalei uma versão diferente do 2.7.x do Python em meu sistema usando um Windows Installer de 32 bits. Recebi o mesmo erro na maioria das minhas instruções de importação. Desinstalei o Python recém-instalado e baixei um instalador do Windows de 64 bits e reinstalei o Python novamente e funcionou. Espero que isso ajude você.

user3233042
fonte
1

Então, eu tive problemas ao instalar o vtk no windows (como eu uso o python 3.7, não há binário disponível até agora apenas para versões mais antigas do python pip install vtk não está funcionando)

Eu escrevi python no meu cmd:

Python 3.7.3 on win32

Então agora eu sei que tenho o python 3.7.3 rodando em 32 bits.

Em seguida, baixei a roda correta em VTK ‑ 8.2.0 ‑ cp37 ‑ cp37m ‑ win32.whl

Em seguida, instalei essa roda:

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

Então eu testei e funcionou:

python
import vtk
sqp_125
fonte
1

Atualizar numpy.

pip install numpy --upgrade

Trabalhe para mim!!

Karthik Suresh
fonte
0

Primeiro, copiei cv2.pydde /opencv/build/python/2.7/x86para C:/Python27/Lib/site-packeges. O erro foi

"RuntimeError: módulo compilado com a API versão 9, mas esta versão do numpy é 7"

Então eu instalei numpy-1.8.0-win32-superpack-python2.7.exee opencv funciona bem.

>>> import cv2
>>> print cv2.__version__
2.4.13
Alireza
fonte
0

Você pode instalar opencvde oficial ou não oficial sites .

Consulte esta pergunta e este problema se você estiver usando Anaconda.

Ramesh-X
fonte
0
  1. Certifique-se de que instalou o python 2.7.12 ou versão inferior, caso contrário, você obterá definitivamente este erro.
  2. Certifique-se de que o cliente Oracle esteja instalado de 64 bits se o sistema operacional for de 64 bits.
  3. Certifique-se de que o Microsoft Visual C ++ Compiler para Python 2.7 seja 64 para bits para sistemas operacionais de 64 bits ou 32 bits para 32 bits. Nota: - Se o seu sistema operacional for de 64 bits, instale todos os pacotes de 64 bits ou se o sistema operacional for de 32 bits, instale o pacote de 32 bits.
Ranjan
fonte
0

Tem uma solução muito simples. Depois de instalar o opencv local

cv2.pydde C:\opencv\build\python\2.7\ **x64**paraC:\Python27\Lib\site-packages

em vez de, lugar cv2.pydde C:\opencv\build\python\2.7\ **x86**paraC:\Python27\Lib\site-packages

Sharat Kanthi
fonte
0

Recebi este erro ao tentar importar MySQLdb.

O que funcionou para mim foi desinstalar o Python e reinstalá-lo.

Recebi o erro após instalar o npm ( https://www.npmjs.com/get-npm ). Uma coisa que ele fez foi instalar o Python, embora eu já o tivesse.

user984003
fonte
0

Isso tem funcionado para mim. Tentei vários métodos, mas esta foi a minha melhor solução.

Abra o prompt de comando e digite o seguinte; pip install opencv-python. (certifique-se de que sua internet esteja ligada). depois disso, tente importá-lo novamente.

user12907613
fonte
0

Este funcionou comigo

pip install -- pywin32==227
Mohammed Said El-Sharkawy
fonte
1
Bem-vindo ao Stack Overflow. Por que funcionou para você? Por favor, você poderia adicionar mais detalhes a esta resposta?
Azametzin 01 de
-2

Eu encontrei a solução, talvez você possa tentar usar a janela cmd em vez da janela de prompt do anaconda para iniciar seu primeiro teste de scrapy.

Michael Ye
fonte