ImportError: การโหลด DLL ล้มเหลว:% 1 ไม่ใช่แอปพลิเคชัน Win32 ที่ถูกต้อง แต่ DLL อยู่ที่นั่น


112

ฉันมีสถานการณ์เหมือนกับเหตุการณ์ที่ImportError: การโหลด DLL ล้มเหลว:% 1 ไม่ใช่แอปพลิเคชัน Win32 ที่ถูกต้องแต่คำตอบนั้นไม่ได้ผลสำหรับฉัน

รหัส Python ของฉันพูดว่า:

import cv2

แต่บรรทัดนั้นทำให้เกิดข้อผิดพลาดที่แสดงในชื่อของคำถามนี้

ฉันติดตั้ง OpenCV ในC:\lib\opencvเครื่อง 64 บิตนี้แล้ว ฉันใช้ Python 64 บิต

ตัวแปร PYTHONPATH ของฉัน: PYTHONPATH=C:\lib\opencv\build\python\2.7. โฟลเดอร์นี้มีcv2.pydและนั่นคือทั้งหมด

ตัวแปรเส้นทางของฉัน: Path=%OPENCV_DIR%\bin;...โฟลเดอร์นี้มีไฟล์ DLL 39 ไฟล์เช่น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) ในเส้นทางของฉันแล้ว และการติดตั้ง OpenCV ของฉันไม่มีโฟลเดอร์ Release ใด ๆ (ยกเว้นโฟลเดอร์ว่างภายใต้ build / java)

มีความคิดว่าเกิดอะไรขึ้น? ฉันสามารถบอก Python ให้ติดตามกระบวนการโหลดโดยละเอียดได้หรือไม่ มันกำลังมองหา DLL อะไรกันแน่?

ขอบคุณลาร์ส

แก้ไข:

ผมเพิ่งสังเกตเห็นว่าตามhttp://www.dependencywalker.com/ที่cv2.pydในC:\lib\opencv\build\python\2.732 บิตในขณะที่เครื่องและงูหลามฉันทำงานเป็น 64 บิต นั่นอาจเป็นปัญหาหรือไม่? และถ้าเป็นเช่นนั้นฉันจะหา cv2.pyd เวอร์ชัน 64 บิตได้ที่ไหน


9
คลิกที่นี่ และค้นหา opencv 64 บิต
Kill Console

1
@KillConsole: ขอบคุณฉันจะลองดู เนื่องจากแพ็คเกจการติดตั้งที่ฉันดาวน์โหลดมีทั้งโฟลเดอร์ย่อย x86 และ x64 ฉันจึงคิดว่ามันรวมทุกอย่างที่ต้องมีสำหรับ 64 บิต ชัดเจนว่าไม่. ไชโยที่แก้ไข! ตอนนี้เรากำลัง "ImportError: numpy.core.multiarray ไม่สามารถนำเข้าได้" ดังนั้นฉันจะลองไซต์เดิมสำหรับตัวเลข 64 บิต หากคุณแสดงความคิดเห็นเป็นคำตอบฉันจะโหวตและยอมรับ
LarsH

คุณใช้ Python เวอร์ชันใด (ไม่ใช่ในแง่ของเวอร์ชันบิตโปรเซสเซอร์)

1
@Begueradj: 2.7 ถ้านั่นคือสิ่งที่คุณถาม
LarsH

1
ฉันมีปัญหาเดียวกันและไม่มีวิธีแก้ปัญหาด้านล่างที่ช่วยฉันได้ดังนั้นจึงกลายเป็นว่าฉันPYTHONPATHเคยมีรายการที่การติดตั้งไลบรารี SimpleCV ทิ้งไว้ที่นั่น แม้ว่าฉันจะถอนการติดตั้ง SimpleCV ไปแล้ว แต่PYTHONPATHก็ไม่ได้รับการกู้คืนและชี้ไปที่ไดเรกทอรีบางรายการที่มี OpenCV เวอร์ชันที่ขัดแย้งกันทิ้งไว้โดยการติดตั้ง SimpleCV วิธีแก้ไข: ล้างไฟล์PYTHONPATH.
Anton Daneyko

คำตอบ:


82

Windows Binaries ที่ไม่เป็นทางการสำหรับแพ็คเกจส่วนขยาย Python

คุณสามารถค้นหา python libs ได้จากที่นี่


สิ่งนี้ช่วยได้จริงๆ ฉันไม่แน่ใจว่าเกิดอะไรขึ้น ฉันมีเวอร์ชัน opencv, anaconda3, python3 ติดตั้ง opencv_python-3.3.0 + Contrib-cp35-cp35m-win_amd64 จากรายการแพ็คเกจด้านบนและสามารถนำเข้า cv2 ได้สำเร็จหลังจากผ่านไปหลายชั่วโมง ขอบคุณมาก
emeralddove

42

โปรดตรวจสอบว่าเวอร์ชัน python ที่คุณใช้เป็น 64 บิตหรือไม่ ถ้าไม่เช่นนั้นอาจเป็นปัญหา คุณจะใช้ python เวอร์ชัน 32 บิตและจะติดตั้งไบนารี 64 บิตสำหรับไลบรารี OPENCV


ดังที่กล่าวไว้ในคำถามฉันใช้ Python 64 บิต
LarsH

18

ว้าวฉันพบอีกกรณีหนึ่งสำหรับปัญหานี้ ข้างต้นไม่ได้ผล ในที่สุดฉันก็ใช้ความสามารถของ python เพื่อพิจารณาสิ่งที่กำลังโหลด สำหรับ python 2.7 หมายความว่า:

import imp
imp.find_module("cv2")

นี่เป็นการเปิดไฟล์ "cv2.pyd" ที่ไม่คาดคิดโดยสิ้นเชิงในไดเร็กทอรี Anaconda DLL ที่ไม่ได้สัมผัสจากการพยายามถอนการติดตั้ง / ติดตั้งหลายครั้ง Python มองหาที่นั่นก่อนและไม่พบการติดตั้งที่ดีของฉัน ฉันลบไฟล์ cv2.pyd นั้นและลอง imp.find_module ("cv2") อีกครั้งและ python ก็พบไฟล์ที่ถูกต้องทันทีและ cv2 ก็เริ่มทำงาน

ดังนั้นหากไม่มีวิธีแก้ปัญหาอื่นใดที่เหมาะกับคุณตรวจสอบให้แน่ใจว่าคุณใช้ python introspection เพื่อดูว่าไฟล์ใดที่ python พยายามโหลด


4
ฉันมีปัญหาเนื่องจากพยายามเรียกใช้เวอร์ชันของไฟล์ในโฟลเดอร์อื่นอย่างสมบูรณ์ วิธีนี้ช่วยให้ฉันรู้ว่าเกิดอะไรขึ้น ขอบคุณ!
Emad Y

3
นี่คือคำตอบที่ยอดเยี่ยมขอบคุณ! ฉันพบปัญหาเกี่ยวกับ PyDev ซึ่งกำลังโหลด "ctypes" จากการติดตั้ง python ที่เข้ากันไม่ได้และฉันตระหนักว่าฉันจำเป็นต้องตั้งค่าล่ามเพื่อใช้ WinPython ซึ่งแก้ไขได้
eacousineau

7

ในกรณีของฉันฉันมี python 64 บิตและเป็น 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

หากระบบสร้างของคุณ (CMake ในกรณีของฉัน) คัดลอกไฟล์จาก<name>.dllถึง<name>.pydคุณจะได้รับข้อผิดพลาดนี้หากไฟล์ต้นฉบับไม่ใช่ dll ในกรณีของฉันการสร้างไลบรารีที่ใช้ร่วมกันถูกปิดดังนั้นไฟล์ที่อยู่ข้างใต้จึงเป็นไฟล์*.lib.

ฉันค้นพบข้อผิดพลาดนี้โดยการโหลดpydไฟล์ในDependencyWalkerและพบว่ามันไม่ถูกต้อง


2

ผมมีปัญหาเหมือนกัน. นี่คือสิ่งที่ฉันทำ:

  1. ฉันดาวน์โหลดไฟล์ pywin32 Wheel จากที่นี่แล้ว

  2. ฉันถอนการติดตั้งโมดูลpywin32 ในการถอนการติดตั้งให้ดำเนินการคำสั่งต่อไปนี้ใน Command Prompt

    pip uninstall pywin32

  3. จากนั้นฉันติดตั้งpywin32ใหม่ ในการติดตั้งให้เปิด Command Prompt ในไดเร็กทอรีเดียวกับที่มีไฟล์ wheel pywin32 อยู่ จากนั้นรันคำสั่งต่อไปนี้

    pip install <Name of the wheel file with extension> ไฟล์ Wheel จะเป็นดังนี้: 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 เดียวกัน การตั้งค่าของฉันไม่สอดคล้องกับProject Propertiesและเวอร์ชันRun Configuration Python

ในProject> Properties> PyDevฉันตั้งค่า Interpreter เป็น Python2.7.11

ในRun Configurations> Interpreterฉันกำลังใช้ Default Interpreter การเปลี่ยนเป็น Python 2.7.11 ช่วยแก้ปัญหาได้


1

ฉันประสบปัญหาเดียวกันเมื่อฉันถอนการติดตั้งและติดตั้ง Python เวอร์ชันอื่น 2.7.x ใหม่ในระบบของฉันโดยใช้ Windows Installer 32 บิต ฉันได้รับข้อผิดพลาดเดียวกันกับคำสั่งนำเข้าส่วนใหญ่ของฉัน ฉันถอนการติดตั้ง Python ที่เพิ่งติดตั้งและดาวน์โหลดตัวติดตั้ง Windows 64 บิตและติดตั้ง Python ใหม่อีกครั้งและใช้งานได้ หวังว่านี่จะช่วยคุณได้


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


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 บิตหาก OS เป็น 64 บิต
  3. ตรวจสอบให้แน่ใจว่า Microsoft Visual C ++ Compiler สำหรับ 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 แม้ว่าฉันจะมีอยู่แล้วก็ตาม


0

สิ่งนี้ได้ผลสำหรับฉัน ฉันได้ลองใช้วิธีต่างๆแล้ว แต่นี่เป็นทางออกที่ดีที่สุดของฉัน

เปิดพรอมต์คำสั่งและพิมพ์สิ่งต่อไปนี้ pip install opencv-python. (ตรวจสอบให้แน่ใจว่าอินเทอร์เน็ตของคุณเปิดอยู่) หลังจากนั้นลองนำเข้าอีกครั้ง



-2

ฉันพบวิธีแก้ปัญหาบางทีคุณอาจลองใช้หน้าต่าง cmd แทนหน้าต่างพรอมต์อนาคอนดาเพื่อเริ่มการทดสอบ scrapy ครั้งแรก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.