一部のWindowsマシンでは正常に動作し、他のマシンでは失敗するexeファイルを作成しました。
失敗の原因はまだわかりませんでした。
重要なデータ:
DEBUGは次のことを示しています。
C:\temp\r>mytool_debug.exe
PyInstaller Bootloader 3.x
LOADER: executable is C:\temp\r\mytool_debug.exe
LOADER: homepath is C:\temp\r
LOADER: _MEIPASS2 is NULL
LOADER: archivename is C:\temp\r\mytool_debug.exe
LOADER: Extracting binaries
LOADER: Executing self as child
LOADER: set _MEIPASS2 to C:\temp\_MEI55762
LOADER: Setting up to run child
LOADER: Creating child process
LOADER: Waiting for child process to finish...
PyInstaller Bootloader 3.x
LOADER: executable is C:\temp\r\mytool_debug.exe
LOADER: homepath is C:\temp\r
LOADER: _MEIPASS2 is C:\temp\_MEI55762
LOADER: archivename is C:\temp\r\mytool_debug.exe
LOADER: SetDllDirectory(C:\temp\_MEI55762)
LOADER: Already in the child - running user's code.
LOADER: manifestpath: C:\temp\_MEI55762\mytool.exe.manifest
LOADER: Activation context created
LOADER: Activation context activated
LOADER: Python library: C:\temp\_MEI55762\python35.dll
Error loading Python DLL: C:\temp\_MEI55762\python35.dll (error code 127)
LOADER: Back to parent (RC: -1)
LOADER: Doing cleanup
LOADER: Freeing archive status for C:\temp\r\mytool_debug.exe
ウィンドウに表示されるエラーメッセージもあります。
Entry Point Not Found
The procedure entry point ucrtbase.terminate could not be located in the dynamic link library api-ms-win-crt-runtime-l1-1-0.dll
すべてのファイルをC:\ temp_MEI55762(ブートローダーがすべてのファイルを抽出した場所)からディレクトリC:\ temp\r(mytool_debug.exeがある場所)にコピーしてmytool_debug.exeを実行すると機能します。
前述のように、mytool.exeは他のWindows7/8コンピューターでも正常に動作します。上記のエラーが原因で動作しないコンピューターを2台見つけました。
どこから検索を開始すればよいですか?
約200のWindowsUpdateをインストールした後、エラーはなくなりました。
必要な更新は KB2999226 によって対処されます
ここでは、Windows Updateをインストールするのではなく、ビルド側のソリューションに向けて取り組んでいるこれについての議論があります: https://github.com/pyinstaller/pyinstaller/issues/1566 。今日(2017年5月9日)の時点では、まだ確固たる解決策はありません。一部の人々のために働いている2つの解決策があります:
Windows 10 SDK をインストールし、ucrt DDLディレクトリをシステムパス(C:\ Program Files\Windows Kits\10\Redist\ucrtまたはC:\ Program Files(x86)\ Windows Kits \ビルドする前に、10\Redist\ucrt\DLLs\x64(システムによって異なります)
3.5+の代わりにPython 3.4を使用してビルドします