【wxpython】exe可するときにfailed to executeと出る

画像1

pythonで作成したファイルを配布するために、pyinstallerを利用してexe化⇒配布をすることがままあります。

普段は何事もなくpyinstallerでexe化しているのですが、今回はエラーが発生し、解決に苦労したので対策を残します。
先に言っておきますと、GoogleAPIのインポートで引っ掛かりました。

本件でできること

exe化したpythonアプリのエラーメッセージ「failed to execute」を解消する。

exe化コマンド(通常)

pyinstaller Main.py --onefile --noconsole

エラー原因の特定

コマンドプロンプトで下記エラーを確認しました。
見れない人は--noconsoleを外すと見れると思います。

pkg_resources.DistributionNotFound: The 'google-api-python-client' distribution was not found and is required by the application

どうもGoogleAPIがうまく使えていないようです。

調査を進めるとpythonファイルの実行とexeからの実行でパス構成に違いがありました。

パスの調べ方

C:\Users\user名>python
Python 3.8.2 (tags/v3.8.2:7b3ab59, Feb 25 2020, 23:03:10) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> import pprint
>>>
>>> pprint.pprint(sys.path)
['',
'C:\\Users\\user名\\AppData\\Local\\Programs\\Python\\Python38\\python38.zip',
'C:\\Users\\user名\\AppData\\Local\\Programs\\Python\\Python38\\DLLs',
'C:\\Users\\user名\\AppData\\Local\\Programs\\Python\\Python38\\lib',
'C:\\Users\\user名\\AppData\\Local\\Programs\\Python\\Python38',
'C:\\Users\\user名\\AppData\\Roaming\\Python\\Python38\\site-packages',
'C:\\Users\\user名\\AppData\\Local\\Programs\\Python\\Python38\\lib\\site-packages',
'C:\\Users\\user名\\AppData\\Local\\Programs\\Python\\Python38\\lib\\site-packages\\win32',
'C:\\Users\\user名\\AppData\\Local\\Programs\\Python\\Python38\\lib\\site-packages\\win32\\lib',
'C:\\Users\\user名\\AppData\\Local\\Programs\\Python\\Python38\\lib\\site-packages\\Pythonwin']
>>>

exeファイル出力時に設定していたパス設定

specファイルの中を覗けばファイル出力時に行われる設定がわかります。
全然足りていません。

pathex=['C:\\Users\\user名\\Documents\\プロジェクト名],

こちらに先ほど調べたパスを追記します。

pathex=['C:\\Users\\User名\\Documents\\GitHub\\Python\\プロジェクト名',
'C:\\Users\\User名\\AppData\\Local\\Programs\\Python\\Python38\\python38.zip',
'C:\\Users\\User名\\AppData\\Local\\Programs\\Python\\Python38\\DLLs',
'C:\\Users\\User名\\AppData\\Local\\Programs\\Python\\Python38\\lib',
'C:\\Users\\User名\\AppData\\Local\\Programs\\Python\\Python38',
'C:\\Users\\User名\\Documents\\プロジェクト名\\venv',
'C:\\Users\\User名\\Documents\\プロジェクト名\\venv\\lib\\site-packages'],

そのあと、更新したSpecファイルを使用してexe化します。
何も考えずにpyinstallerを使うとspecファイルを初期状態に更新してしまうので注意してください。

pyinstaller Main.spec

スペックファイルの中にexe化するファイルの情報がまとまっていますので、対象のpythonファイルの指定は必要ありません。

以上でエラーを吐かないexeが完成しました。

その他の対処方法もネット上に転がってますので色々みてみてください。

この記事が気に入ったらサポートをしてみませんか?