チュートリアルに関する記事の6本目です。
参考サイト: Flask – Tutorial(公式ドキュメント)
- チュートリアル
- クイックスタート
8. プロジェクトをインスール可能にする
プロジェクトをインストールできるようにするということはつまり、Flaskを自身の環境にインストールしたように、ディストリビューションファイルを作成し、他の環境でもインストールできるようにするということです。これはプロジェクトのデプロイを他のライブラリと同じようにすることで、あらゆることを管理するため標準的なPythonツール全てを使っています。
インストール化は、このチューリアルや新規のPythonユーザにとってよくわかりにくものかもしれませんが、メリットも生むものです。
- 現在、プロジェクトディレクトリでアプリケーションの実行が完了し、PythonとFlaskは
flaskr
パッケージの使い方を理解しています。インストール可能にするということは、そのプロジェクトがどこで実行されようともそれをインポートできるということを意味します。 - 他のパッケージが行うように、プロジェクトの依存関係を管理します。そのため
pip install yourproject.whl
でインストールできるようになります。 - テストツールは、開発環境からテスト環境を分離させることができます。
<注記>
これはこのチュートリアルに最近、挿入された項目です。しかし将来的には常に把握されるべきです。
8-1. プロジェクトについての記述
setup.py
ファイルは、このプロジェクトやこれに付属するファイルについて記述、インストール化の設定を行うファイルです。
# setup.py
from setuptools import find_packages, setup
setup(
name='flaskr',
version='1.0.0',
packages=find_packages(),
include_package_data=True,
zip_safe=False,
install_requires=[
'flask',
],
)
package
はPythonにどのパッケージディレクトリ(とそれらが含むPythonファイル)を含むべきか伝える役割をします。find_packages()
は、これらパッケージディレクトリを自動で見つけてくれるため、一つ一つ書き出す手間を省いてくれます。静的ファイルやテンプレートファイルなどの他のファイルを含むには、include_package_data
がセットされる必要があります。Pythonは他に含むデータがなんであるか明示するためMANIFEST.in
と名付けられるファイルを利用します。
setuptools
…Pythonのモジュール。Pythonの標準管理パッケージであるdistutils
を拡張するライブラリとeasy_install
の補助コマンドをセットしています。
# MANIFEST.in include flaskr/schema.sql graft flaskr/static graft flaskr/templates global-exclude *.pyc
これは、static
とtemplates
ディレクトリの全てのファイルとschema.sql
ファイルをコピーするようPythonに伝えます。しかし、バイトコードのファイルは全て除かれます。
これらのファイルや使用されるオプションの説明をさらにみるには、official packaging guideを参照して下さい。
8-2. プロジェクトをインストールする
仮想環境にプロジェクトをインストールするには、pip
を使います。
<補足>
setup.pyとMANIFEST.inを新規の仮想環境下に置き、下記のコマンドを実行するとflaskrのパッケージがインストールされます。 pip install -e . これは、現在のディレクトリの中でsetup.py
を見つけ、編集ができる開発モードでそれをインストールするコマンドです。編集可能モードとは、ローカルコードに変更を加えたときに、依存関係などのプロジェクトに関するメタデータを変更した場合にのみ再インストールする必要があることを意味します。
pip list
でプロジェクトがインストールできたことを確認します。
$ pip list
Package Version Location
-------------- --------- ----------------------------------
click 6.7
Flask 1.0
flaskr 1.0.0 /home/user/Projects/flask-tutorial
itsdangerous 0.24
Jinja2 2.10
MarkupSafe 1.0
pip 9.0.3
setuptools 39.0.1
Werkzeug 0.14.1
wheel 0.30.0
今の所、プロジェクトを起動する方法に変わりはありません。FLASK_APP
にflaskr
をセットし、flask run
でアプリケーションを起動します。ただし、flask-tutorial
でなくとも、どこからでもこのアプリケーションを呼び出すことができます。