OpenCVを使用するPython 3.5 64ビットプログラム(Windowsのテンソルフローに必要))があります。pyinstallerで配布しています。
Windows10でプログラムをビルドしました
/c/Python35/Scripts/pyinstaller -c DeepMeerkat.spec
私のコンピューターでは、.exeがビルドされ、完全に実行されます。その他のWindows10以外のマシン
オン
import cv2
戻り値
ImportError:DLLロードに失敗しました:指定されたモジュールが見つかりませんでした。
pyInstaller thread でこれに関する膨大な量の議論を見ることができますが、それをどのように実践するかはよくわかりません。 Dependency Walkerは、DLLがいくつか不足していると言っています
api-ms-win-crt-**.dll
さて、pyInstallerスレッドから、これらのDLLが存在することがわかります
C:\Program Files (x86)\Windows Kits\10\Redist\ucrt\DLLs
アーキテクチャに基づく複数のサブフォルダの下。
.specファイルに追加してみました
pathex=["C:/Program Files (x86)/Windows Kits/10/Redist/ucrt/DLLs/"],
または私の特定のアーキテクチャの場合
pathex=["C:/Program Files (x86)/Windows Kits/10/Redist/ucrt/DLLs/arm"],
これが私が提案されていると思ったものです ここ
「Windows10用のWindowsソフトウェア開発キット(SDK)をインストールし、.specファイルを展開して必要なDLLを含めます。上記のリンクの番号6の「ユニバーサルCRTを使用するソフトウェアの配布」を参照してください。
それは何の効果もありませんでした。私は次のような何百ものエラーが発生しています
121472 WARNING: lib not found: api-ms-win-crt-runtime-l1-1-0.dll dependency of c:\python35\DLLs\_ssl.pyd
しかし、ここでDLL
C:\Program Files (x86)\Windows Kits\10\Redist\ucrt\DLLs\arm
だから私は文字通りフォルダ全体をポストホックにコピーしました
cp -r "C:/Program Files (x86)/Windows Kits/10/Redist/ucrt/DLLs/" dist/Lib/
しかし、これらを.exe
に接続する方法は明確ではありません。明らかに、事前にpyInstallerに通知することをお勧めします。
私も試しました
/c/Python35/Scripts/pyinstaller --path "C:/Program Files (x86)/Windows Kits/10/Redist/ucrt/DLLs/arm" -c DeepMeerkat.spec
そしてそれはまだそれらを見つけられませんでした
また、そのフォルダーをPATHに追加してみました。何か案は?
スペックファイルを提供していただければ、何が起こっているのかがわかります。ここから、ファイルが含まれていない可能性があります。
ここから進むには2つの方法があります。
チェック ここにバイナリ(dllを含む)ファイルを追加 ファイルを手動で含めることに関するpyinstallerのドキュメント。
チェック ここにデータファイルを追加 ファイルを手動で含めることに関するpyinstallerのドキュメント。
Dllフォルダーのdllファイルを含むスペックファイルの例。
block_cipher = None a = Analysis(['minimal.py'], pathex = ['/Developer/PItests/minimal'], binaries = [ ( 'C:\Program Files (x86)\Windows Kits\10\Redist\ucrt\DLLs', '.' ) ], datas = [ ('helpmod/help_data.txt', 'helpmod' ) ], hiddenimports = [], hookspath = None, runtime_hooks = None, excludes = None, cipher = block_cipher) pyz = PYZ(a.pure, a.zipped_data, cipher = block_cipher) exe = EXE(pyz,... ) coll = COLLECT(...)
PyInstallerとPy2exeがdllのピックアップに何度も失敗するのを見てきました。個人的に、私はそれらの使用をバッチまたはbashでラップして、それらの機能を拡張するいくつかの理由があります。論理的には、それらをpyスクリプト自体でラップするための引数があります...
とにかく、これと戦うよりも、ラッパースクリプトを使用して依存関係をインストールパッケージにコピーする方が簡単な場合があります。
通常、不足しているものを実行しようとすると、dllが不足しているというエラーがスローされます。それぞれを手動でディレクトリに追加し、自分で含める必要があるものをメモします。次に、それをスクリプト化します。
私はこれを自分で行う必要がありますが、まだ行っていません。私がそうするとき、私は私の完全な解決策を投稿しようとします。その間...
検索パスを拡張するだけでなく、明示的に含めるように要求する必要があると思います。
https://pythonhosted.org/PyInstaller/spec-files.html#adding-binary-files
おそらく、彼らが言及しているTree
クラスを使用して、すべてのファイルを収集します。
https://pythonhosted.org/PyInstaller/advanced-topics.html#the-tree-class