【悩み】
・pyinstallerでexeを生成したいが途中でエラーが発生しうまくいかない。
・pywin32.pywintypes.errorのEndUpdateResourceWを解決したい。
・110, ‘EndUpdateResourceW’というエラー内容の意味は?
こういった「悩み」に答えます。
【本記事の内容】
① pyinstallerでexe生成中にpywin32.pywintypes.errorが発生した経緯
➁ pyinstallerでexe生成中にpywin32.pywintypes.errorが発生した原因
➂ pyinstallerでexe生成中にpywin32.pywintypes.errorを解決する方法
本記事を実践したことで、5分くらいで「win32ctypes.pywin32.pywintypes.error: (110, ‘EndUpdateResourceW’, ‘指定されたデバイスまたはファイルを開けません。’)」のエラーを解決できました(下の動画参照)。
記事の前半では「本エラーの発生経緯」を解説します。
記事の後半では「本エラーの発生原因」から「解決する方法」までを紹介します。
この記事を読み終えることで、「エラーで動かないpyinstallerのコマンドを解消でき、正常にexeファイルを生成できる状態」になるはずです。
pyinstallerでexe生成中にpywin32.pywintypes.errorが発生した経緯
「pyinstallerでexe生成中にpywin32.pywintypes.errorが発生した経緯」に関して解説します。
本事象が発生した当時は、納期が近く、「数日前までは発生しなかったのになぜできない?」と思いつつ、慌てふためいた記憶があります。
筆者は、以下のようなpyinstallerのコマンドを実行しexeファイルを生成しようと考えていました。
pyinstaller main.py --name auto-checker.exe --onefile --noconsole --icon=image/favicon.ico
上記のコマンドを実行したところ、以下のエラーが発生し、exeファイルは生成されない状態でした。
1324 INFO: Copying bootloader EXE to C:\Users\user\Dropbox\設定方法\python\word\checker\dist\auto-checker.exe.notanexecutable
Traceback (most recent call last):
File "C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\win32ctypes\pywin32\pywintypes.py", line 35, in pywin32error
yield
File "C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\win32ctypes\pywin32\win32api.py", line 229, in EndUpdateResource
_resource._EndUpdateResource(handle, discard)
File "C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\win32ctypes\core\ctypes\_util.py", line 64, in check_false
raise make_error(function, function_name)
OSError: [WinError 110] 指定されたデバイスまたはファイルを開けません。
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.10_3.10.2288.0_x64__qbz5n2kfra8p0\lib\runpy.py", line 196, in _run_module_as_main
return _run_code(code, main_globals, None,
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.10_3.10.2288.0_x64__qbz5n2kfra8p0\lib\runpy.py", line 86, in _run_code
exec(code, run_globals)
File "C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\Scripts\pyinstaller.exe\__main__.py", line 7, in <module>
File "C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\PyInstaller\__main__.py", line 194, in _console_script_run
run()
File "C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\PyInstaller\__main__.py", line 180, in run
run_build(pyi_config, spec_file, **vars(args))
File "C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\PyInstaller\__main__.py", line 61, in run_build
PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
File "C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\PyInstaller\building\build_main.py", line 971, in main
build(specfile, distpath, workpath, clean_build)
File "C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\PyInstaller\building\build_main.py", line 893, in build
exec(code, spec_namespace)
File "C:\Users\user\Dropbox\設定方法\python\word\checker\auto-checker.exe.spec", line 24, in <module>
exe = EXE(
File "C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\PyInstaller\building\api.py", line 552, in __init__
self.__postinit__()
File "C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\PyInstaller\building\datastruct.py", line 173, in __postinit__
self.assemble()
File "C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\PyInstaller\building\api.py", line 653, in assemble
winresource.RemoveAllResources(build_name)
File "C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\PyInstaller\utils\win32\winresource.py", line 245, in RemoveAllResources
win32api.EndUpdateResource(hsrc, False)
File "C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\win32ctypes\pywin32\win32api.py", line 228, in EndUpdateResource
with _pywin32error():
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.10_3.10.2288.0_x64__qbz5n2kfra8p0\lib\contextlib.py", line 153, in __exit__
self.gen.throw(typ, value, traceback)
File "C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\win32ctypes\pywin32\pywintypes.py", line 37, in pywin32error
raise error(exception.winerror, exception.function, exception.strerror)
win32ctypes.pywin32.pywintypes.error: (110, 'EndUpdateResourceW', '指定されたデバイスまたはファイルを開けません。')
本事象は、以下の日時と環境で発生しました。
動作確認済み日時:2022年12月12日
動作確認済み環境:Windows 11 pro
以上が、「pyinstallerでexe生成中にpywin32.pywintypes.errorが発生した経緯」となります。
pyinstallerでexe生成中にpywin32.pywintypes.errorが発生した原因
「pyinstallerでexe生成中にpywin32.pywintypes.errorが発生した原因」に関して解説します。
EndUpdateResourceWのエラーコード110が発生する原因としては、「ウィルス対策ソフト」や「セキュリティソフト」の影響となります。
本事象「pywintypes.error: (110, ‘EndUpdateResourceW’, ‘指定されたデバイスまたはファイルを開けません。’)」が発生する原因は、以下となります。
【発生原因】
エラーの意味:
「指定されたデバイスまたはファイルを開けません」です。
エラー箇所:
_util.py内の64行目にあるcheck_false関数で以下のエラーが発生
OSError: [WinError 110] 指定されたデバイスまたはファイルを開けません。
原因:
pyinstallerが開きたいファイルを開くことができていないためです。
開くことができない理由としては、主に以下が考えられます。
・ウィルス対策ソフトがpyinstallerのファイルアクセスを制限している
・Windowsセキュリティがpyinstallerのファイルアクセスを制限している
以上が、「pyinstallerでexe生成中にpywin32.pywintypes.errorが発生した原因」となります。
pyinstallerでexe生成中にpywin32.pywintypes.errorを解決する方法
「pyinstallerでexe生成中にpywin32.pywintypes.errorを解決する方法」に関して解説します。
今回は、Windows セキュリティを一時的に無効化し、本エラーを解消する方法を説明します。
まずは、windowsボタンをクリックし、下図のように「windows セキュリティ」を開きましょう。
クリック後、「ウィルスと脅威の防止」をクリックし、下図赤枠の「設定の変更」を押してください。
クリック後、「リアルタイム保護」配下にあるボタン(下図の赤枠)をクリックして、オンからオフに変更します。
以上の操作を実施後に、再度pyinstallerのコマンドを実行しましょう。
pyinstaller main.py --name auto-checker.exe --onefile --noconsole --icon=image/favicon.ico
352 INFO: PyInstaller: 5.7.0
353 INFO: Python: 3.10.8
360 INFO: Platform: Windows-10-10.0.22000-SP0
361 INFO: wrote C:\Users\user\Dropbox\設定方法\python\word\checker\auto-checker.exe.spec
365 INFO: UPX is not available.
366 INFO: Extending PYTHONPATH with paths
['C:\\Users\\user\\Dropbox\\設定方法\\python\\word\\checker']
1078 INFO: checking Analysis
1205 INFO: checking PYZ
1247 INFO: checking PKG
1302 INFO: Bootloader C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\PyInstaller\bootloader\Windows-64bit-intel\runw.exe
1304 INFO: checking EXE
1304 INFO: Building EXE because EXE-00.toc is non existent
1304 INFO: Building EXE from EXE-00.toc
1304 INFO: Copying bootloader EXE to C:\Users\user\Dropbox\設定方法\python\word\checker\dist\auto-checker.exe.notanexecutable
1313 INFO: Copying icon to EXE
1314 INFO: Copying icons from ['C:\\Users\\user\\Dropbox\\設定方法\\python\\word\\checker\\image\\favicon.ico']
1315 INFO: Writing RT_GROUP_ICON 0 resource with 62 bytes
1315 INFO: Writing RT_ICON 1 resource with 1128 bytes
1316 INFO: Writing RT_ICON 2 resource with 2440 bytes
1316 INFO: Writing RT_ICON 3 resource with 4264 bytes
1317 INFO: Writing RT_ICON 4 resource with 9640 bytes
1321 INFO: Copying 0 resources to EXE
1321 INFO: Embedding manifest in EXE
1324 INFO: Updating manifest in C:\Users\user\Dropbox\設定方法\python\word\checker\dist\auto-checker.exe.notanexecutable
1325 INFO: Updating resource type 24 name 1 language 0
1329 INFO: Appending PKG archive to EXE
1362 INFO: Fixing EXE headers
1695 INFO: Building EXE from EXE-00.toc completed successfully.
コマンド実行後、「successfully」が表示された場合、「正常にpyinstallerでexeファイルを生成できた」と判断できます。
上記の流れで、本事象を無事に解消できました。
pywintypes.error: (110, ‘EndUpdateResourceW’, ‘指定されたデバイスまたはファイルを開けません。’)が発生しても慌てる必要はないです。エラー内容を理解し、一つ一つ原因をつぶすことで本問題を解消できます。
【まとめ】pyinstallerでexe生成中にでるエラーコード110
いかがでしたでしょうか?
上記で紹介した「pywintypes.error: (110, ‘EndUpdateResourceW’, ‘指定されたデバイスまたはファイルを開けません。’)」エラーが発生した場合、「ウィルス対策ソフト」や「Windowsセキュリティ」を一時的に停止させることで解消できます。
最後にもう一度内容を確認しましょう。
【原因と解決方法】
・原因
pyinstallerが開きたいファイルを開くことができていないため
・解決するための方法は2つ
ウィルス対策ソフトを停止もしくはpyinstallerを監視対象外とする
Windowsセキュリティを停止もしくはpyinstallerを監視対象外とする
本ブログでは、「業務の時短化に繋がるIT技術」や「クラウドやOSSの学び方」などを発信しています。定期的に更新していますので、ぜひブックマークをよろしくお願いいたします。
コメント