2015-12-29 4 views
6

Ich bin ein Python und Kodierung Neuling.Ich habe versucht, nach Posts zu suchen, aber scheint, als ob ich nicht finden kann, mit dem gleichen Problem konfrontiert.py2exe kann EXE wegen fehlender DLL nicht erstellen, wenn opencv importiert wird

Ich verwende Python 2.7 und opencv3.0 auf Windows 10.

Ich versuchte, meine Py-Datei in eine EXE-Datei mit py2exe zu konvertieren. Das Befehlsfenster sagte mir jedoch.

error: [Errno 2] No such file or directory: 'api-ms-win-core-registry-l1-1-0.dll' 

Das ist mein setup.py

from distutils.core import setup 
import py2exe 
import matplotlib 
import FileDialog 
setup(windows=['HW6.py'], 
     options={ 
       'py2exe': { 
       "includes" : ["matplotlib.backends.backend_tkagg","cv2"], 

       'excludes': ['_gtkagg', '_tkagg', '_agg2', '_cairo','_cocoaagg', 
           "matplotlib.numerix.fft","sip", "PyQt4._qt", 
           "matplotlib.backends.backend_qt4agg", 
           "matplotlib.numerix.linear_algebra", 
           "matplotlib.numerix.random_array", 
          '_fltkagg', '_gtk','_gtkcairo' ], 

       'dll_excludes': ['libgdk-win32-2.0-0.dll', 
           'libgobject-2.0-0.dll' , 
           'MSVCP90.dll'] 
       } 

       }, 

     data_files=matplotlib.get_py2exe_datafiles(),) 

Nachdem ich 'api-ms-win-core-Registry-l1-1-0.dll' ausgeschlossen, tauchte ein weiterer Fehler auf und sagte

error: [Errno 2] No such file or directory: 'api-ms-win-core-errorhandling-l1-1-1.dll' 

Nachdem ich viele DLLs ausgeschlossen habe, fehlen noch einige DLLs. Hier sind, was ich ausgeschlossen

'api-ms-win-core-string-l1-1-0.dll', 
'api-ms-win-core-registry-l1-1-0.dll', 
'api-ms-win-core-errorhandling-l1-1-1.dll', 
'api-ms-win-core-string-l2-1-0.dll', 
'api-ms-win-core-profile-l1-1-0.dll', 
'api-ms-win-core-processthreads-l1-1-2.dll', 
'api-ms-win-core-libraryloader-l1-2-1.dll', 
'api-ms-win-core-file-l1-2-1.dll', 
'api-ms-win-security-base-l1-2-0.dll', 
'api-ms-win-eventing-provider-l1-1-0.dll', 
'api-ms-win-core-heap-l2-1-0.dll', 
'api-ms-win-core-libraryloader-l1-2-0.dll', 
'api-ms-win-core-localization-l1-2-1.dll', 
'api-ms-win-core-sysinfo-l1-2-1.dll', 
'api-ms-win-core-synch-l1-2-0.dll', 
'api-ms-win-core-heap-l1-2-0.dll' 

Hier sind Dinge importiert in 'HW6.py'

import matplotlib.pyplot as plt 
from Tkinter import * 
from PIL import ImageTk,Image 
import numpy as np 
import copy 
import FileDialog 
import warnings 
import cv2 

Ohne

import cv2 

Alles funktioniert gut. Ich habe keine Ahnung, wie man mit diesen DLLs umgeht. Danke!

+0

Rechtschreibfehler? '" Nachdem ich viele DLLs ausgeschlossen habe, fehlen noch einige DLLs "' notiere die ** ausgeschlossen ** – Torxed

+0

Ich denke nicht, dass es ein Rechtschreibproblem ist. Ich möchte wirklich DLLs "ausschließen", anstatt sie einzubeziehen, was für mich funktioniert, wenn ich mit dieser Art von Problem zuvor konfrontiert wurde.Allerdings sind diesmal zu viele DLLs schief gelaufen und ich habe keine Ahnung wie ich das beheben kann. – tsao

Antwort

2

Kaum eine aufschlussreiche Antwort, aber ich hatte das gleiche Problem und kann sagen, dass die vollständige Liste der api-ms-Core * DLLs, die für mich ausgeschlossen werden müssen, ist:

"dll_excludes": ["MSVCP90.dll","libzmq.pyd","geos_c.dll","api-ms-win-core-string-l1-1-0.dll","api-ms-win-core-registry-l1-1-0.dll","api-ms-win-core-errorhandling-l1-1-1.dll","api-ms-win-core-string-l2-1-0.dll","api-ms-win-core-profile-l1-1-0.dll","api-ms-win*.dll","api-ms-win-core-processthreads-l1-1-2.dll","api-ms-win-core-libraryloader-l1-2-1.dll","api-ms-win-core-file-l1-2-1.dll","api-ms-win-security-base-l1-2-0.dll","api-ms-win-eventing-provider-l1-1-0.dll","api-ms-win-core-heap-l2-1-0.dll","api-ms-win-core-libraryloader-l1-2-0.dll","api-ms-win-core-localization-l1-2-1.dll","api-ms-win-core-sysinfo-l1-2-1.dll","api-ms-win-core-synch-l1-2-0.dll","api-ms-win-core-heap-l1-2-0.dll","api-ms-win-core-handle-l1-1-0.dll","api-ms-win-core-io-l1-1-1.dll","api-ms-win-core-com-l1-1-1.dll","api-ms-win-core-memory-l1-1-2.dll","api-ms-win-core-version-l1-1-1.dll","api-ms-win-core-version-l1-1-0.dll"] 

Alles normal gearbeitet danach.

+0

Wow, was für eine lange Liste! Ich werde das ein paar Tage später ausprobieren und berichten, ob es auch für mich funktioniert. Danke vielmals! – tsao

3

Ich denke, ich habe herausgefunden, was genau das Problem ist. Dies liegt daran, dass das cv2.pyd von einer Dll auf Systemebene abhängig ist (versuchen Sie "dumpbin/dependents cv2.pyd", wenn Sie Visual Studio installiert haben), und sie werden nicht von py2exe ignoriert, z.

MSVFW32.dll 
AVIFIL32.dll 
AVICAP32.dll 
ADVAPI32.dll 
CRYPT32.dll 
WLDAP32.dll 

Und diese DLL Antworten auf die "api-ms-Win-Core - *****". Wenn Sie Ihre Software auf andere Rechner verteilen möchten, sollten diese DLLs ebenfalls nicht kopiert werden.

Endlich ist es sinnvoller, die obigen dls auszuschließen als "api-ms-win-core-*****", und auf diese Weise soll auch das Problem gelöst werden,

"dll_excludes": ["MSVFW32.dll", 
       "AVIFIL32.dll", 
       "AVICAP32.dll", 
       "ADVAPI32.dll", 
       "CRYPT32.dll", 
       "WLDAP32.dll"] 
0

Ich benutze nicht opencv, aber war auf demselben Problem fest. Nachdem ich py2exe geändert hatte, um mir mitzuteilen, welche Bilder welche DLLs importierten, fand ich, dass die Liste für die importierten Bibliotheken erweitert wurde (auch wenn einige bereits in py2exe hardcodiert sind). :

"dll_excludes": [ 
'MSVCP90.dll', 
'IPHLPAPI.DLL', 
'NSI.dll', 
'WINNSI.DLL', 
'WTSAPI32.dll', 
'SHFOLDER.dll', 
'PSAPI.dll', 
'MSVCR120.dll', 
'MSVCP120.dll', 
'CRYPT32.dll', 
'GDI32.dll', 
'ADVAPI32.dll', 
'CFGMGR32.dll', 
'USER32.dll', 
'POWRPROF.dll', 
'MSIMG32.dll', 
'WINSTA.dll', 
'MSVCR90.dll', 
'KERNEL32.dll', 
'MPR.dll', 
'Secur32.dll', 
] 
Verwandte Themen