2015-12-29 72 views
6

私はPythonでコーディングnewbie.Iは投稿を検索しようとしましたが、同じ問題が他に面しているようです。py2exeはopencvをインポートするとDLLが見つからないためにEXEを作成できません

私はpy2exeを使用してEXEファイルに自分の.pyファイルを変換しようとした

のWindows 10上のPython 2.7とopencv3.0を使用しています。 しかし、コマンドウィンドウが私に語った。

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

これは私が 'API-MS-WIN-コアレジストリ-l1-1-0.dll' を除外した後、別のエラーがポップアップし、

言った私の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(),) 

です

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

多くのDLLを除外した後も、まだDLLがありません。ここ は、私が '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 

import cv2 

すべてが正常に動作しないとしてインポートされた事をここで

'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' 

を除外されたものです。 私はこれらのDLLをどのように処理するのか分かりません。 ありがとう!

+0

スペルミス? ''多くのDLLを除外した後、まだいくつかのDLLが見つかりません "' **除外** ** – Torxed

+0

私はスペルの問題とは思わない。 DLLを含めるのではなく、DLLを「除外」したいのですが、これは前にこの種の問題で遭遇したときに役に立ちます。しかし、今回はあまりにも多くのDLLが間違っていて、私はそれを修正する方法がわかりません。 – tsao

答えて

2

ほとんど洞察に満ちた答えが、私は同じ問題を抱えていたし、除外される必要があり、API-MS-コア*のDLLの完全なリストは私のためであると言うことができます:

"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"] 

すべてが通常通り働いていましたその後。

+0

うわー、どのような長いリスト!私は数日後にこれを試し、それが私のために働くかどうかを報告します。どうもありがとう! – tsao

3

私は問題が何であるかを正確に把握していると思います。これは、cv2.pydがいくつかのシステムレベルのDLL(Visual Studioがインストールされている場合は "dumpbin/dependents cv2.pyd"を試してください)に依存しており、py2exeによって無視されないためです。

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

これらのdllは「api-ms-win-core-*****」に返信します。ソフトウェアを他のマシンに配布したい場合は、これらのdllもコピーしないでください。

最後に、「api-ms-win-core-*****」ではなく、上記のdllを除外することにより、もっと賢明な解決策になります。このようにして問題は解決されます。

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

私はopencvを使用していませんが、同じ問題を抱えています。どの画像がどのDLLをインポートしているのかをpy2exeに変更した後、インポートされたlibsのためにリストを拡張することが判明しました(py2exe自体では既にハードコードされていますが、 :

"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', 
] 
関連する問題