Pythonの実行ファイル作成:pyinstallerを使った場合、標準出力のコンソールウィンドウがすぐに消える問題の解決方法

プログラミング

問題

pyinstallerでハローワールドのpythonスクリプトを実行ファイル化したところ、コンソールウィンドウが一瞬で消えて、確認できなかった。

print("Hello World!!")

実行ファイル化してもコンソールウィンドウでメッセージを確認できるようにしたい。

解決方法

time.sleep()で停止させるのも手だが指定秒数経過で閉じてしまう。
そんな場合はinput文を使用するのがいい。
スクリプトの実行が終了する前にユーザ入力を待つようになる。
エンターを押すか、コンソールウィンドウを閉じない限り、スクリプトも終了しないため、結果を確認することができる。

input("Press Enter to exit...")

input文にこんな使い方があるなんて目からうろこだった。
ソフトのインストールでコマンドプロンプトが出てきて処理が終わった後に「消すにはエンターを押してください」と出てくる時があったが、入力待ちにさせることでウィンドウを消さないようにしてたのかとわかってうれしかった。

参考:スタックオーバーフロー

print文が記述されたソースコードをexe化したときのprint文の扱われ方について
1.デバグ用のログ出力としてprint文を書いていますが、exe化したときにこの部分はどうなるのでしょうか?ツール側が都合よく無視してくれるのでしょうか?2.ソースコード上のprint文をテキストファイルかなんかで出力する方法はありますか?例えば、コンソールを出したくない、--noconsolというようなコマンドライン...

pyinstallerの使い方

実行ファイル化した手順をまとめておく。

pipでpyinstallerをインストール

コマンド

pip install pyinstaller

一つのexeファイルにすべてをまとめる方法。

オプション–onefileをつける。

pyinstaller my_file.py --onefile

このオプションをつけるとdistフォルダが作成され、その中にmyfile.exeが作成される。
仮想環境中のライブラリなどがすべてexeファイルに変換される。ランタイム環境が入っていないコンピュータでも実行できる反面、ファイルサイズが異常に大きくなる。
exeファイルをダブルクリックすればスクリプトが実行されるので、VSCodeを立ち上げる手間が省けて便利。

今回のテーマと逆にコンソールを表示させたくない場合

コンソールが邪魔な場合はオプション–noconsoleを追加。

pyinstaller my_file.py --onefile --noconsole

 

記事は以上になります。

コメント

タイトルとURLをコピーしました