【Python】【Flask】pyinstallerでexeファイルを作成する
pyinstallerを使うことにより、flaskアプリを1つのexeにまとめて実行することができる。
pyinstallerでexeファイルの作成自体は上手くいっているように見えたが、実際にexeファイルを実行すると、configファイルが読み込めておらず、けっこうハマった。
本記事では、pyinstallerでのexeファイル作成までを記載する。
ディレクトリ構成
ディレクトリ構成は以下の通り。
1flaskApp
2┣━flaskApps
3┃ ┣━static ←JSとかCSSとか画像とかのディレクトリ
4┃ ┣━templates ←htmlのディレクトリ
5┃ ┣━logs
6┃ ┣━__init__.py
7┃ ┣━config.py
8┃ ┣━sample1.py
9┃ ┗━sample2.py
10┗━manage.py
環境によって読み込むconfigファイルを変えようとしたところ、上手くいかなかったので、オブジェクトでconfigの切り替えを実施。
configファイルやmanage.py、__init__.pyの内容は以下の記事を参照。
本記事では、pyinstallerでのexeファイル作成までを記載する。
pyinstallerのインストール
pipでpyinstallerをインストールする。
1(env)>pip install pyinstaller
.specの作成
pyinstallerで○○.specファイルを作成する。
1(env)~>cd flaskApp
2
3(env)flaskApp>pyinstaller manage.py -F
4
5(出力例)
61013 INFO: PyInstaller: 3.4
71013 INFO: Python: 3.6.8
81014 INFO: Platform: Windows-10-10.0.17134-SP0
9~~略~~
1042337 INFO: Building EXE from EXE-00.toc completed successfully.
ここでは、一先ず、manage.specというファイルを作成する。
以下のようにディレクトリやファイルが作成される。
1flaskApp
2┣━flaskApps
3┃ ┣━static ←JSとかCSSとか画像とかのディレクトリ
4┃ ┣━templates ←htmlのディレクトリ
5┃ ┣━logs
6┃ ┣━__init__.py
7┃ ┣━config.py
8┃ ┣━sample1.py
9┃ ┗━sample2.py
10┣━manage.py
11┣━__pycache__ ★
12┣━build ★
13┣━dist ★←この中にexeが作成される
14┗━manage.spec ★←編集していくファイル
続いて、manage.specを編集していく。
.specの編集
manage.specにflaskAppsの構成を記載していく。
1#manage.spec
2# -*- mode: python -*-
3import sys
4sys.setrecursionlimit(5000)
5
6block_cipher = None
7#templates,static,logsのディレクトリを追加
8added_files = [
9 ('flaskApps\\templates', 'flaskApps\\templates'),
10 ('flaskApps\\static', 'flaskApps\\static'),
11 ('flaskApps\\logs', 'flaskApps\\logs'),
12 ]
13#sample1.py, sample2.py, config.pyを追加
14hidden_imports = [
15 'flaskApps.sample1',
16 'flaskApps.sample2',
17 'flaskApps.config',
18 ]
19#カレントディレクトリとflaskAppsを追加
20paths = [
21 './',
22 './flaskApps',
23 ]
24
25a = Analysis(['manage.py'],
26 pathex=paths,
27 binaries=[],
28 datas=added_files,
29 hiddenimports=hidden_imports,
30# ~~略~~
ひとまず、必要なファイルやディレクトリを追記する。
なお–add-data、–add-binary、 –hidden-import、 –paths 等のオプションを指定することでも、datasやhiddenimports、pathexに値を設定することは可能だが、数が多くなってくると、後から編集した方が便利だと思う。
(参考)pyinstallerコマンドの使い方
https://pyinstaller.readthedocs.io/en/stable/usage.html
exeファイルの作成
.specファイルの編集が終わったら、.specファイルを用いてexeファイルを作成する。
1(env)flaskApp>pyinstaller manage.spec -F
2
3(出力例)
41013 INFO: PyInstaller: 3.4
51013 INFO: Python: 3.6.8
61014 INFO: Platform: Windows-10-10.0.17134-SP0
7~~略~~
842337 INFO: Building EXE from EXE-00.toc completed successfully.
これで、distディレクトリにspecファイルの内容を反映したmanage.exeが作成される。