Blow Up by Black Swan

Python-Flask で作る Web アプリケーション(チュートリアル編6)


チュートリアルに関する記事の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

これは、statictemplatesディレクトリの全てのファイルと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_APPflaskrをセットし、flask runでアプリケーションを起動します。ただし、flask-tutorialでなくとも、どこからでもこのアプリケーションを呼び出すことができます。

チュートリアル7