Flask

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

MAX

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の内容は以下の記事を参照。

あわせて読みたい
【Python】【Flask】オブジェクトでテスト環境と本番環境の設定を分ける
【Python】【Flask】オブジェクトでテスト環境と本番環境の設定を分ける

本記事では、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が作成される。

スポンサーリンク
ABOUT ME
MAX
MAX
ITエンジニア、データサイエンティスト
新卒でSIerに入社し、フリーランスになってWEB系へ転向。
その後AIの世界へ足を踏み入れ、正社員に戻る。 テーブルデータの分析がメイン。
スポンサーリンク
記事URLをコピーしました