pythonを仮想環境で実行ファイル化(venv、pyinstallerモジュール)

プログラム

前回の記事(pythonでYouTubeアップロード(YouTubeAPI))では、pythonとyoutubeAPIによる動画の自動アップロードを作成しました。

今回は、前回作成したpythonのプログラムを実行ファイル形式 (exe化) していこうと思います。

実行ファイルで出来ること

これまで作成したプログラムは動作の為に実行する環境でpythonのインストールが必要でした。
実行ファイル形式 (exe化) すると、面倒なpython環境のインストール無しで、プログラムを実行することが出来る様になります。
友人や知人に作成したプログラムを配布するのに便利な形式です。

実行ファイルを作成するためにやること

結論から先に言ってしまうと、 pyinstallerモジュール をインストールして、
次のコマンドを実行するだけです。
実行後、作業フォルダの下にdistフォルダが作成され、exeファイルが
格納されています。

各オプションの意味は次の通りです。
–onefile  
  exeファイルを1つだけ出力します。
 このオプションを付けないと、 exeファイル 以外に
 複数のファイルが作成されます。
 (exeファイルを配布する際にも必要になる為、
 通常はオプションを付与します。)
–noconsole
 完成したexeファイルの実行時にコンソール画面を
 表示するかどうかを指定します。
 ログ出力などを行っていない場合、 このオプションは
 付与しないようにします。(プログラム内で
 どのような処理が行われているかわからないの為。)
         

実行ファイル作成時の懸念事項

作成したファイルの容量は大きくなってしまう傾向があります。
理由は、実行ファイルの中に、pythonの実行環境そのものが
含まれる仕組みになっているためです。
これは、それまで取り込んできたモジュールを全て含んでしまう為、
実行ファイル化したいプログラムで利用していないモジュールも
含んでしまうことを意味します。

実行ファイルの軽量化の為にやること

その為、本記事では実行ファイル作成の前に一作業加えることで、
実行ファイルの軽量化を目指します。
具体的には、 次の作業を行います。
 1.仮想環境を構築する。
 2.仮想環境を起動する。
 3.仮想環境に必要なモジュールをインストールする。
 4.pyinstaller を実行する。

仮想環境の構築

python3系の標準モジュールであるvenvを利用して構築します。
次のコマンドで構築します。

仮想環境の起動

次のコマンドで起動します。(停止コマンドも記載します。)

— 起動コマンド
[環境を構築するフォルダ名]\Scripts\activate
— 停止コマンド
[環境を構築するフォルダ名]\Scripts\deactivate

仮想環境に必要なモジュールをインストール

[環境を構築するフォルダ名] 以下で、pipコマンドを実行するだけです。
インストールするモジュールは、最低限のものにします。
先日ご紹介したyoutubeUpload.pyの例であれば、次のコマンドを実行します。

同様に、仮想環境にpyinstallerモジュール をインストール します。

pyinstaller の実行

最後に次のコマンドを仮想環境で実行します。
コマンドは上述と同内容です。
実行後、仮想環境の作業フォルダの下にdistフォルダが作成され、
exeファイルが格納されています。

実行ファイル(exeファイル)の作成手順は以上です。

実行ファイルの利用方法

前回の記事で記載した通り、引数を指定して実行するだけです。

実行時のユースケース

以降は、 私が youtubeupload.pyのexeファイルを作成した際に、
直面したエラーメッセージと解決方法を記載します。

ケース1: youtubeAPIの認証エラー

作成したexeファイル用のyoutubeAPI認証情報が必要のようで、
エラーメッセージに表示されているURLにアクセスして、
新たに認証キーを取得後、Enter verification code: に続いて、
認証キーを入力すると解決します。
認証キーを入力 後、exeファイルと同フォルダにyoutubeUpload.exe-oauth2.jsonファイルが作成されます。

ケース2:モジュールが存在しない旨のエラー

作成したexeファイルにプログラム内でimportしたモジュールが
含まれないことがあるようです。
次の手順で解決します。
1. [プログラムファイル名].specファイル (※)を編集。
2.pyinstaller コマンドを実行。
(※)exe化しようとしているファイルと同じフォルダに存在します。

[プログラムファイル名].specファイルの編集

ファイル内の hiddenimports にエラーが発生したモジュール名を記載します。
今回の例であれば、次の様に記載します。

(2022/3/13追記)ここに記載したにもかかわらず、モジュールが存在しない旨のエラーが出続ける場合、importしたモジュールそのものに構文エラー(Syntax Error)が含まれている事を疑います。

pyinstaller コマンドの実行

次のコマンドを実行します。

実行後、作業フォルダの下にdistフォルダが作成され、exeファイルが
格納されています。

終わりに

いかがでしたでしょうか。

pythonは便利なモジュールがたくさんある為、開発に入りやすい言語ではありますが、成果物の配布には実行環境などを考えなければいけない点がネックです。

今回の記事では、その解決案を提示できたと考えています。

一方、実行(exe)ファイル化した後でプログラムの変更はできない為、例えば環境設定情報などの様に、変更の可能性がある箇所は、予めプログラムとは別に外部ファイル化しておく必要があると思います。次の記事では、プログラム内の直書き情報の外部ファイル化の手順を纏めています。

python プログラムの直書きを外部ファイル化する話(configparserモジュール)
pythonのconfigparserモジュールを利用して、環境設定情報を外部ファイル化するプログラミングをしていきます。このプログラムで出来る事プログラム上に直書きしていた内容を外部ファイルにて管理できるようになります。...

参考)pythonで自動ログイン

Web上のログイン処理を自動化しています。

pythonのseleniumモジュールで自動ログイン【proxy対応版】
pythonのseleniumモジュールを利用して、GoogleChrome上のWebサイトへ自動ログインするプログラミングをしていきます。proxy対応無し版、proxy対応有り版の両方を記載していきます。このプログラム...

参考)GASとLINEボットで自動翻訳アプリ

Google Apps ScriptとLINEボットによる自動翻訳アプリです。

Google Apps ScriptとLINEボットで翻訳アプリ作成 – GASによる翻訳アプリの作成 – 
Google Apps Script(GAS)のLanguageAppを利用して、英語と日本語の双方向の翻訳をするLINEボットをプログラミングをしていきます。GoogleのOCR技術を利用して、テキストだけではなく、画像内の文字...

コメント

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