蛇使いな彼女BLOG
【第52回】 12の後日談(pyinstallerでexe化したファイルがノートPCで動かない問題について)
2022.02.18
皆さんこんにちは!
ここ数回に渡ってpyinstallerを使ってプログラムをexe化する工程をお話したと思います!
このときwin10Pro(64bit)でエグゼファイルを作成していたのですが、作成したPC上ではちゃんと起動する事を確認出来ました!
なので、配布することを想定してもう1つ別のノートパソコン(32bit)でも起動するか試してみたんですね!
するとどうでしょう…
“このアプリはお使いのPCでは実行できません”
とシステムに怒られました...(´・ω・`)
なんで起動しないの!?」とショックを受けて、いろいろと調べるうちに後で分かったことですが、そもそも64bit版のPythonで作ったアプリは32bitパソコンでは起動できないようです(°°;)
じゃあどうするのかと言うと、これを改善するためには、仮想環境でPythonの32bit版をインストールするとこから始めないといけない様子…。(←お使いのパソコンが32bitならしなくても大丈夫)
私はめんどくさいので64bitのパソコンから32bitのパソコンにランナーチェンジしてpyinstallerでエグゼ化を行いました。
これでやっと成功するかと思いきや、、コンソールに以下のようなエラーが…。
CondaVerificationError:
The package for pyinstaller located at
C:\Users\HYDROLAB\Anaconda3\pkgs\pyinstaller-4.5.1-py36hc69ef3d_0
appears to be corrupted. The path
'Lib/site-packages/PyInstaller/bootloader/Windows-32bit/run.exe'
(↑このファイルが破損しているらしい…)
specified in the package manifest cannot be found.
先に詳細を説明しておくと、私が開発に使用しているPythonのバージョンは3.6で、コマンドプロンプトからpip やcondaを使ってpyinstallerをインストールした際、特にバージョン指定しなかったので暗黙的にpyinstaller-4.5.1のバージョンをインストールしていました。
こちらのバージョン、Python3.6の環境ならPyinstallerで一番安定していると言われるバージョンらしいですが……よくよくコンソールを見ていると32bit版のファイルの一部が破損しているようですね💧
そこで破損箇所をインストールし直そうと思いcondaの仮想環境※1からconda install pyinstaller を実行するとPC本体のウイルス検知ソフトに↑のrun.exeファイルが引っかかっていることが判明しました。
(;´Д`)マジかあああああ
この原因の一説には、“ウイルス作るときに高確率でpyinstallerが使用されているから“というコメントもありました…。(まあ確かにそうだよね)
これはもうどうしようもないのでウイルス検知ソフトのカスタマーセンターに直接問い合わせました(笑)
ソフト提供元によっても操作手順が変わりますが、
一度ウイルスとして誤認&除去されたファイルを検知対象から除外して復元することで、このエラーは改善されるようです。
詳しくはお使いのウイルスセキュリティソフト提供元に問い合わせてみてください(;´Д`)
この問題がクリアできればエグゼ化は完成です♪♪
ちなみにですが、アプリを作る側だけでなく出来上がったアプリをzip形式でほかのPCに配布したときも、送り先のPCのウイルス検知ソフトに配布したアプリ(.exe)が引っかかって実行できない場合もあるので、先と同じ手順でウイルス検知から除外することを覚えておくといいかもしれませんね!!
ノートPCで起動しない問題について、初めは出来上がったエグゼファイルが重すぎるのが原因かと思っていたので、仮想環境についていろいろ勉強してみたんですが、まさかウイルス検知ソフトだったとは…
モトハシ、この度は呆気にとられました。
では次回もお楽しみに♪
※1 仮想環境について
pip やcondaでライブラリを沢山インストールしたPython環境を使用している場合、そのままの状態でpyinstallerからプログラムのエグゼ化を行うと、その環境にインストールされている全てのライブラリを含んだファイルを生成するようです。
配布用のスクリプト(プログラム)で使用していない余分なライブラリもパッキングされてしまうのでファイルが肥大化するんですね💧
そこで、普段使っているベース環境とは別に、ライブラリが何も入っていない仮の環境(仮想環境)を作って、そこに最低限のライブラリをインストールしてパッキングすることで軽量化されたエグゼファイルが作成できます(^^)