Flask

【Python】【Flask】pyinstallerでexeファイルを作成する

pyinstallerを使うことにより、flaskアプリを1つのexeにまとめて実行することができる。

pyinstallerでexeファイルの作成自体は上手くいっているように見えたが、実際にexeファイルを実行すると、configファイルが読み込めておらず、けっこうハマった。

本記事では、pyinstallerでのexeファイル作成までを記載する。

ディレクトリ構成

ディレクトリ構成は以下の通り。

flaskApp
┣━flaskApps
┃  ┣━static        ←JSとかCSSとか画像とかのディレクトリ
┃  ┣━templates     ←htmlのディレクトリ
┃  ┣━logs
┃  ┣━__init__.py
┃  ┣━config.py
┃  ┣━sample1.py
┃  ┗━sample2.py
┗━manage.py

 

環境によって読み込むconfigファイルを変えようとしたところ、上手くいかなかったので、オブジェクトでconfigの切り替えを実施。

configファイルやmanage.py、__init__.pyの内容は以下の記事を参照。

https://max999blog.com/python-flask-setup-environment-by-environment-variable/

本記事では、pyinstallerでのexeファイル作成までを記載する。

pyinstallerのインストール

pipでpyinstallerをインストールする。

(env)>pip install pyinstaller

 

.specの作成

pyinstallerで○○.specファイルを作成する。

(env)~>cd flaskApp

(env)flaskApp>pyinstaller manage.py -F

(出力例)
1013 INFO: PyInstaller: 3.4
1013 INFO: Python: 3.6.8
1014 INFO: Platform: Windows-10-10.0.17134-SP0
~~略~~
42337 INFO: Building EXE from EXE-00.toc completed successfully.

ここでは、一先ず、manage.specというファイルを作成する。

以下のようにディレクトリやファイルが作成される。

flaskApp
┣━flaskApps
┃ ┣━static        ←JSとかCSSとか画像とかのディレクトリ
┃ ┣━templates     ←htmlのディレクトリ
┃ ┣━logs
┃ ┣━__init__.py
┃ ┣━config.py
┃ ┣━sample1.py
┃ ┗━sample2.py
┣━manage.py
┣━__pycache__  ★
┣━build     ★
┣━dist      ★←この中にexeが作成される
┗━manage.spec  ★←編集していくファイル

続いて、manage.specを編集していく。

.specの編集

manage.specにflaskAppsの構成を記載していく。

#manage.spec
# -*- mode: python -*-
import sys
sys.setrecursionlimit(5000)

block_cipher = None
#templates,static,logsのディレクトリを追加
added_files = [
               ('flaskApps\\templates', 'flaskApps\\templates'), 
               ('flaskApps\\static', 'flaskApps\\static'),
               ('flaskApps\\logs', 'flaskApps\\logs'), 
              ]
#sample1.py, sample2.py, config.pyを追加
hidden_imports = [
         'flaskApps.sample1',
         'flaskApps.sample2',
         'flaskApps.config',
         ]
#カレントディレクトリとflaskAppsを追加
paths = [
         './',
         './flaskApps',
         ]

a = Analysis(['manage.py'],
             pathex=paths,
             binaries=[],
             datas=added_files,
             hiddenimports=hidden_imports,
~~略~~

ひとまず、必要なファイルやディレクトリを追記する。

なお–add-data、–add-binary、 –hidden-import、 –paths 等のオプションを指定することでも、datasやhiddenimports、pathexに値を設定することは可能だが、数が多くなってくると、後から編集した方が便利だと思う。

(参考)pyinstallerコマンドの使い方

https://pyinstaller.readthedocs.io/en/stable/usage.html

exeファイルの作成

.specファイルの編集が終わったら、.specファイルを用いてexeファイルを作成する。

(env)flaskApp>pyinstaller manage.spec -F

(出力例)
1013 INFO: PyInstaller: 3.4
1013 INFO: Python: 3.6.8
1014 INFO: Platform: Windows-10-10.0.17134-SP0
~~略~~
42337 INFO: Building EXE from EXE-00.toc completed successfully.

これで、distディレクトリにspecファイルの内容を反映したmanage.exeが作成される。