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.