02:Pyramidアプリケーション用のPythonパッケージ(02: Python Packages for Pyramid Applications)¶
最新のPython開発のほとんどは、Pythonパッケージを使用して行われています。Pyramidでもこのアプローチは有効です。このステップでは、最小限のPythonプロジェクトの中で最小のPythonパッケージとして 「Hello World」をやり直します。
背景(Background)¶
Python開発者は、モジュールとファイルのコレクションを package と呼ばれる名前空間にまとめられます。ディレクトリが「sys.path」上にあり、「__init__.py」いう特別なファイルをもつとPythonパッケージとして扱われます。
パッケージはバンドルアップしてインストールできるようになり、「setup.py」ファイルを中心としたツールチェーンを通じてインストールできます。このチュートリアルでは、以下の点を知っておく必要があります:
- 各チュートリアルのステップごとのディレクトリが プロジェクト として用意されています。
- このプロジェクトには「setup.py」、プロジェクトの機能をディレクトリに注入するためのものが含まれます。
- このプロジェクトでは、_Pythonモジュールファイルの「__init__.py」を使用してPython パッケージにtutorialサブディレクトリを作成します。
- プロジェクトを開発モードでインストールするために「pip install -e .」を実行します。
要約すると:
- 開発はPythonパッケージで行います。
- パッケージはプロジェクトの一部になります。
目標(Objectives)¶
- 「__init__.py」とPythonの "パッケージ"ディレクトリを作ります。
- 「setup.py」を作成することで最小限のPython「プロジェクト」を入手してください。
- 開発者モードで「tutoria」プロジェクトをインストールします。
手順(Steps)¶
チュートリアルの手順を実行するための領域を作成します:
$ cd ..; mkdir package; cd package
「package/setup.py」の中で以下のように入力します:
from setuptools import setup requires = [ 'pyramid', ] setup(name='tutorial', install_requires=requires, )
開発のために新しいプロジェクトをインストールして、実行コード用のディレクトリを作成します:
$ $VENV/bin/pip install -e . $ mkdir tutorial
「package/tutorial/__init__.py」内で以下のように入力します:
# package
「package/tutorial/app.py」内で以下のように入力します:
from waitress import serve from pyramid.config import Configurator from pyramid.response import Response def hello_world(request): print('Incoming request') return Response('<body><h1>Hello World!</h1></body>') if __name__ == '__main__': with Configurator() as config: config.add_route('hello', '/') config.add_view(hello_world, route_name='hello') app = config.make_wsgi_app() serve(app, host='0.0.0.0', port=6543)
WSGIアプリケーションを以下のように実行します:
$ $VENV/bin/python tutorial/app.py
ブラウザで http://localhost:6543/ を開きます。
分析(Analysis)¶
Pythonパッケージはプロジェクト開発のユニットを提供します。Pythonプロジェクトは、「setup.py」経由で私たちのパッケージがインストールされたときに特別な機能を提供します(この場合、「-e」を含んでいてローカル開発モード、ローカル編集可能モードとも呼ばれます)。
このステップではPythonパッケージである「tutorial」が呼び出されます。不要な再入力を避けるためチュートリアルの各ステップで同じ名前を使用します。
「tutorial」ディレクトリ上にプロジェクトのパッケージを扱うファイルがあります。現時点では、必要なのは骨子となる「setup.py」です。
他のアプリケーションのすべてが同じです。Pythonパッケージを「setup.py」で作成して、開発モードでインストールしました。
app(python tutorial/app.py)を実行する方法は少し変わっています。一度に1つのステップを処理するチュートリアルを作成しない限りは行うことはありません。Pythonモジュールをパッケージ内で直接スクリプトとして実行することは一般的には悪い方法です。