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
できました