さわやかに

Pythonのことだったり子供のことだったり

Pyinstaller pythonモジュールをexeファイルに変換する

最近はあんまり使わないらしいです
重いし、遅いし、ってことなんだと思う

でもpythonをダウンロードしていないPCでpythonプログラムを実行するのに1番手っ取り早いから備忘録として残しておく

Windows PowerShellを開いて、exe化したいモジュールのあるフォルダに移動する

cd [フォルダ名]
C:\Users\(ユーザ名)> cd python
C:\Users\(ユーザ名)\python> # 移動できました

仮装環境を作る

python -m venv [仮想環境名]
C:\Users\(ユーザ名)\python> python -m venv pydataenv

仮想環境に入る

[仮想環境名]/scripts/activate
C:\Users\(ユーザ名)\python> pydataenv/scripts/activate
(pydataenv)C:\Users\(ユーザ名)\python> # 仮想環境に入りました

モジュールに使用したパッケージをインストールする

pip install [パッケージ名]


pyinstallerを実行

pyinstaller --onefile --noconsole [ファイル名]
  • onefile ・・・ 一つのファイルにまとめる
  • noconsole ・・・黒い画面を表示しない
(pydataenv)C:\Users\(ユーザ名)\python> pyinstaller --onefile --noconsole sample.py

もし.specを編集した場合、もう一度実行

pyinstaller [ファイル名].spec --onefile --noconsole

今度は.pyを実行するのではなくて、.specを実行する

(pydataenv)C:\Users\(ユーザ名)\python> pyinstaller sample.spec --onefile --noconsole

なぜ.specを編集するのか?
exeファイルが動かなかったり、軽量化のためにpandasのMKL・・・を除く。。などなど

こちらを参考にさせていただきました
qiita.com



3つのフォルダと1つのファイルが作成される

__pycache__
build
dist # <- ここにexeファイルがある
sample.spec

distの中にexeファイルが作成されている

これを渡してあげればpythonがない環境でも実行できる

ただ、エラーがでて強制終了すると黒い画面は残らず閉じてしまうので、
exeファイルで実行したときに出たエラーはエラーメッセージを確認できない

なのでエラー対処はexeファイルにする前にやっておくこと!


メモメモ

exe化して作成したファイルがWindowsディフェンダートロイの木馬系のウィルスが検知されてしまう場合がある

解決方法はいくつかあるみたいですが、私は以下で解決しました。
”PyInstallerのバージョンをダウングレードする”
2020/09/19現在、PyInstallerは4.0ですが、3.5を使うこと!
pypi.org

pipでバージョンを指定してインストールする

(pydataenv)C:\Users\(ユーザ名)\python> pip install pyinstaller == 3.5
ERROR: Invalid requirement: '=='

エラーになっちゃいました
==の前後のブランクはいらないみたいです

(pydataenv)C:\Users\(ユーザ名)\python> python -m pip install -U pyinstaller==3.5
Processing
…
Successfully installed altgraph-0.17 future-0.18.2 pefile-2019.4.18 pyinstaller-3.5 pywin32-ctypes-0.2.0

できました