2013-09-26 126 views
87

我有一個非常像ImportError: DLL load failed: %1 is not a valid Win32 application的情況,但答案沒有爲我工作。ImportError:DLL加載失敗:%1不是有效的Win32應用程序。但DLL的有

我的Python代碼說:

import cv2 

但該行拋出這個問題的標題所示的錯誤。

我在這臺64位機器上安裝了C:\lib\opencv的OpenCV。我正在使用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 load failed: %1 is not a valid Win32 application表示將「新的opencv二進制文件路徑(C:\opencv\build\bin\Release)添加到Windows PATH環境變量」。但是如上所示,我的PATH中已經有OpenCV二進制文件夾(C:\lib\opencv\build\x64\vc11\bin)。而我的OpenCV安裝沒有任何發佈文件夾(build/java下的空白文件除外)。

任何關於發生了什麼問題的想法?我可以告訴Python詳細追蹤加載過程嗎?究竟是什麼DLL尋找?

謝謝, 拉斯

編輯:

我只注意到的是,根據http://www.dependencywalker.com/,在C:\lib\opencv\build\python\2.7cv2.pyd是32位,而我運行的機器和Python的是64位。這可能是問題嗎?如果是這樣,我可以在哪裏找到64位版本的cv2.pyd?

+6

點擊[瀏覽](HTTP:// WWW .lfd.uci.edu /〜gohlke/pythonlibs /#opencv)並找到64位opencv –

+1

@KillConsole:謝謝,我會試一試。由於我下載的安裝包具有x86和x64子文件夾,因此我認爲它包含了64位的所有內容。顯然不是。萬歲,修好了!現在我們正在處理「ImportError:numpy.core.multiarray無法導入」,所以我會嘗試用於64位numpy的同一站點。如果你把你的評論寫成答案,我會贊成並接受它。 – LarsH

+0

你使用了哪個Python版本? (而不是處理器位版本) – 2015-02-03 12:49:44

回答

73
+0

這確實有幫助。我不知道什麼是錯的。我有一個版本的opencv,anaconda3,python3。從上面的軟件包列表中安裝了opencv_python-3.3.0 + contrib-cp35-cp35m-win_amd64,經過數小時的努力後,能夠成功導入cv2。萬分感謝。 – emeralddove

27

找到任何的Python庫請檢查您是否正在使用Python版本也是64位。如果不是,那麼這可能是問題。您將使用32位python版本,並將爲OPENCV庫安裝一個64位二進制文​​件。

+0

正如問題中提到的,我使用的是64位Python。 – LarsH

6

在我的情況,我有64位的Python,它是lxml是錯誤的版本 - 我應該一直在使用它的x64版本。我解決了這個點擊這裏下載LXML的64位版本:

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

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

這是最簡單的答案令人沮喪的問題。

6

我剛剛遇到了這個問題,它只是因爲我使用的是opencv文件的x64版本。試過了x86,它工作。

2

我將cv2.pyd文件從/opencv/build/python/2.7/x86文件夾複製而不是從/x64文件夾複製到C:/Python27/Lib/site-packeges。我遵循了其餘的說明here提供的說明。

1

對我來說,問題是我在相同的 Eclipse項目中使用了不同版本的Python。我的設置與項目屬性運行配置 Python版本不一致。

項目>屬性> PyDev,我有解釋器設置爲Python2.7.11。

運行配置>解釋器,我使用的是默認解釋器。將其更改爲Python 2.7.11可解決問題。

9

哇,我發現這個問題的另一個案例。以上都沒有奏效。最終我用python的能力來反思正在加載的內容。對於Python 2.7,這意味着:

import imp 
imp.find_module("cv2") 

這不是由多個卸載感動的蟒蛇DLL目錄打開了一個完全出乎意料「cv2.pyd」文件/安裝的嘗試。 Python首先在那裏看,沒有找到我的好安裝。我刪除了那個cv2.pyd文件並且再次嘗試了imp.find_module(「cv2」),並且python立刻發現了正確的文件並且cv2開始工作。

因此,如果沒有其他解決方案適用於您,請確保您使用python introspection來查看python試圖加載的文件。

+1

我有一個問題,它試圖完全在不同的文件夾中運行文件的一個版本。這裏的解決方案幫助我弄清楚了究竟發生了什麼。謝謝! –

+0

這是一個很好的答案,謝謝!我遇到了一個PyDev的問題,它從一個不兼容的Python安裝中加載「ctypes」,我意識到我需要設置我的解釋器來使用WinPython,它解決了這個問題。 – eacousineau

-2

我找到了解決方案,也許你可以嘗試使用cmd窗口而不是anaconda提示窗口來啓動你第一次scrapy測試。

0

首先我將cv2.pyd/opencv/build/python/2.7/x86複製到C:/Python27/Lib/site-packeges。錯誤是

"RuntimeError: module compiled against API version 9 but this version of numpy is 7"

然後我安裝numpy-1.8.0-win32-superpack-python2.7.exe和opencv工作正常。

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

如果您的構建系統(CMake的在我的情況),將文件複製從<name>.dll<name>.pyd,你會如果原始文件本來就不是一個dll得到這個錯誤。在我的情況下,構建共享庫已關閉,所以底層文件實際上是*.lib

我發現此錯誤是通過加載pyd文件在DependencyWalker並發現它無效。

1

我有同樣的問題。下面是我所做的:

  1. 我從here下載pywin32輪的文件,然後

  2. 我卸載了pywin32模塊。要卸載,請在命令提示符中執行以下命令。

    pip uninstall pywin32

  3. 於是,我重新安裝pywin32。要安裝它,請打開pywin32 wheel文件所在目錄中的命令提示符。然後執行以下命令。

    pip install <Name of the wheel file with extension> 輪文件會像:piwin32-XXX-cpXX-NONE-win32.whl

它solvs這個問題對我來說。你也可以試試看。希望它也適合你。

1

當我在我的系統上使用32位Windows安裝程序卸載並重新安裝不同版本的2.7.x Python時,我遇到了同樣的問題。我的大部分進口報表都有同樣的錯誤。 我卸載了新安裝的Python,並下載了一個64位Windows安裝程序,並重新安裝了Python,並且工作正常。 希望這可以幫助你。

0
  1. 請確定您已經安裝了python 2.7.12或更低版本,否則您將會明確地得到這個錯誤。
  2. 如果OS是64位,請確保Oracle客戶端已安裝64位。
  3. 確保用於Python 2.7的Microsoft Visual C++編譯器對於64位的Os是64位,對於32位是32位的。 注意: - 如果您的操作系統是64位安裝所有包的64位或者如果Os是32位安裝32位軟件包。
0

它有一個非常簡單的解決方案 安裝的OpenCV ... 當您從C座cv2.pyd:\ OpenCV的\建設\ python的\ 2.7 \ 到C:\ Python27 \ LIB \定點包

相反,從C座cv2.pyd:\ OpenCV的\建設\ python的\ 2.7 \ 到C:\ Python27 \ LIB \站點包

相關問題