インストール(Installation)

あなたが始める前に(Before you begin)

このチュートリアルでは、 (機械翻訳) インストール Pyramid の手順に従っていることを前提としていますが、**仮想環境を作成したり、Pyramid ** をインストールしたりすることはありません。以下の要件を満たします。

SQLite3とその開発パッケージをインストールする(Install SQLite3 and its development packages)

パッケージマネージャを使用してPythonをインストールした場合、またはソースからPythonをコンパイルした場合は、SQLite3とその開発パッケージをインストールする必要があります。 Pythonを https://www.python.org からインストーラとしてダウンロードした場合は、すでにインストール済みでこの手順を省略できます。

SQLite3パッケージをインストールする必要がある場合(Debianシステムと 「apt-get」 など)は、コマンドは以下のようになります:

$ sudo apt-get install libsqlite3-dev

cookiecutterをインストールする(Install cookiecutter)

cookiecutter を使って、PythonパッケージプロジェクトテンプレートからPythonパッケージプロジェクトを作成します。 Cookiecutterのインストール の指示に従ってください。

cookiecutterからピラミッドプロジェクトを生成する(Generate a Pyramid project from a cookiecutter)

UNIXの場合はホームディレクトリに、Windowsの場合はルートにPyramidプロジェクトを作成します。 「cookiecutter」をインストールした場所へのパスを知っていると仮定します。

UNIXの場合(On UNIX)

$ cd ~
$ cookiecutter gh:Pylons/pyramid-cookiecutter-alchemy --checkout 1.9-branch

Windowsの場合(On Windows)

c:\> cd \
c:\> cookiecutter gh:Pylons/pyramid-cookiecutter-alchemy --checkout 1.9-branch

すべてのオペレーティングシステム(On all operating systems)

最初の項目の入力を求められたら、returnキーを押してデフォルトの「yes」 を受け入れます。

You've cloned ~/.cookiecutters/pyramid-cookiecutter-alchemy before.
Is it okay to delete and re-clone it? [yes]: yes
project_name [Pyramid Scaffold]: myproj
repo_name [myproj]: tutorial

新しく作成したプロジェクトにディレクトリを移動する(Change directory into your newly created project)

UNIXの場合(On UNIX)

$ cd tutorial

Windowsの場合(On Windows)

c:\> cd tutorial

「VENV」 環境変数を設定して使用する(Set and use a VENV environment variable)

「VENV」環境変数を仮想環境の絶対パスに設定し、それを先に使用します。

UNIXの場合(On UNIX)

$ export VENV=~/tutorial

Windowsの場合(On Windows)

c:\tutorial> set VENV=c:\tutorial

仮想環境を作成する(Create a virtual environment)

UNIXの場合(On UNIX)

$ python3 -m venv $VENV

Windowsの場合(On Windows)

Pythonの各バージョンは異なるパスを使用するため、Pythonバージョンのコマンドへのパスを調整する必要があります。最近のバージョンのWindows用Python3インストーラは、Pythonランチャをインストールするようになりました。

Python 2.7:

c:\tutorial> c:\Python27\Scripts\virtualenv %VENV%

Python 3.6:

c:\tutorial> python -m venv %VENV%

仮想環境におけるパッケージングツールのアップグレード(Upgrade packaging tools in the virtual environment)

UNIXの場合(On UNIX)

$ $VENV/bin/pip install --upgrade pip setuptools

Windowsの場合(On Windows)

c:\tutorial> %VENV%\Scripts\pip install --upgrade pip setuptools

開発モードでのプロジェクトのインストール(Installing the project in development mode)

プロジェクトの開発を簡単にするには、プロジェクトをワークスペースの開発する卵として登録する必要があります。同時にテスト要件をインストールします。次のコマンドでそれを行います。

UNIXの場合(On UNIX)

$ $VENV/bin/pip install -e ".[testing]"

Windowsの場合(On Windows)

c:\tutorial> %VENV%\Scripts\pip install -e ".[testing]"

すべてのオペレーティングシステム(On all operating systems)

コンソールは「pip」でパッケージのチェックとインストールされていないパッケージのインストールを表示します。このコマンドを実行すると以下のような行が表示されます。

Successfully installed Jinja2-2.8 Mako-1.0.6 MarkupSafe-0.23 \
PasteDeploy-1.5.2 Pygments-2.1.3 SQLAlchemy-1.1.4 WebOb-1.6.3 \
WebTest-2.0.24 beautifulsoup4-4.5.1 coverage-4.2 py-1.4.32 pyramid-1.7.3 \
pyramid-debugtoolbar-3.0.5 pyramid-jinja2-2.7 pyramid-mako-1.0.2 \
pyramid-tm-1.1.1 pytest-3.0.5 pytest-cov-2.4.0 repoze.lru-0.6 six-1.10.0 \
transaction-2.0.3 translationstring-1.3 tutorial venusian-1.0 \
waitress-1.0.1 zope.deprecation-4.2.0 zope.interface-4.3.3 \
zope.sqlalchemy-0.7.7

テスト要件は、プロジェクトの「setup.py」ファイル内の「tests_require」と「extras_require」スタンザで定義されています。

24
25
26
27
28
tests_require = [
    'WebTest >= 1.3.1',  # py3 compat
    'pytest',
    'pytest-cov',
]
48
49
50
    extras_require={
        'testing': tests_require,
    },

テストを実行する(Run the tests")

プロジェクトをdevelopment modeおよびtesting requireにインストールしたら、プロジェクトのテストを実行できます。次のコマンドは、テストを実行するモジュールを指定するpy.testにオプションを提供して、quietモードでpy.testを実行します。

UNIXの場合(On UNIX)

$ $VENV/bin/py.test -q

Windowsの場合(On Windows)

c:\tutorial> %VENV%\Scripts\py.test -q

テストが正常に終了するには、次のような出力が表示されます。

..
2 passed in 0.44 seconds

テストカバレッジ情報を公開する(Expose test coverage information)

「py.test」コマンドを実行するとテストカバレッジ情報を見れます。これは、「py.test」と同じようにテストを実行しますが、coverage 情報を追加して、テスト対象となるプロジェクトの行を公開します。

「pytest-cov」パッケージを仮想環境にすでにインストールしてありますので、カバレッジを使用してテストを実行できます。

UNIXの場合(On UNIX)

$ $VENV/bin/py.test --cov --cov-report=term-missing

Windowsの場合(On Windows)

c:\tutorial> %VENV%\Scripts\py.test --cov --cov-report=term-missing

成功すると、以下のように出力されます。

======================== test session starts ========================
platform Python 3.6.0, pytest-3.0.5, py-1.4.31, pluggy-0.4.0
rootdir: /Users/stevepiercy/tutorial, inifile:
plugins: cov-2.4.0
collected 2 items

tutorial/tests.py ..
------------------ coverage: platform Python 3.6.0 ------------------
Name                               Stmts   Miss  Cover   Missing
----------------------------------------------------------------
tutorial/__init__.py                   8      6    25%   7-12
tutorial/models/__init__.py           22      0   100%
tutorial/models/meta.py                5      0   100%
tutorial/models/mymodel.py             8      0   100%
tutorial/routes.py                     3      2    33%   2-3
tutorial/scripts/__init__.py           0      0   100%
tutorial/scripts/initializedb.py      26     16    38%   22-25, 29-45
tutorial/views/__init__.py             0      0   100%
tutorial/views/default.py             12      0   100%
tutorial/views/notfound.py             4      2    50%   6-7
----------------------------------------------------------------
TOTAL                                 88     26    70%
===================== 2 passed in 0.57 seconds ======================

パッケージは100%のテストカバレッジを持っていません。

テストとカバレッジcookiecutterのデフォルト(Test and coverage cookiecutter defaults)

Cookiecuttersには、「py.test」とテストカバレッジのデフォルト設定が含まれています。設定ファイルはパッケージのルートにある「pytest.ini」と 「.coveragerc」です。デフォルトnになければ、テストとカバレッジを実行するモジュールへのパスを指定する必要があります。

UNIXの場合(On UNIX)

$ $VENV/bin/py.test --cov=tutorial tutorial/tests.py -q

Windowsの場合(On Windows)

c:\tutorial> %VENV%\Scripts\py.test --cov=tutorial tutorial\tests.py -q

py.testは次のようになります conventions for Python test discovery であり、cookiecutterのデフォルトの設定は「py.test」にテストとカバレッジを実行するモジュールを見つける場所を指定します。

参考

Usage and Invocations のpy.testのドキュメントを参照するか、「py.test -h」で完全なオプションセットを見てください。

データベースの初期化(Initializing the database)

データベースを初期化するには、「initialize_tutorial_db」 console script を使う必要があります。

注釈

" 「initialize_tutorial_db」コマンドは、マイグレーションは実行しません。存在していないテーブルを作成していくつかのダミーデータを追加します。すでにデータベースがある場合は、 「initialize_tutorial_db」を再実行する前にデータベースを削除する必要があります。

以下のコマンドを入力して、 「tutorial」ディレクトリ(development.ini」があるディレクトリ)にまだ入っていることを確認してください:

UNIXの場合(On UNIX)

$ $VENV/bin/initialize_tutorial_db development.ini

Windowsの場合(On Windows)

c:\tutorial> %VENV%\Scripts\initialize_tutorial_db development.ini

コンソールの出力は以下のようになります。

2016-12-18 21:30:08,675 INFO  [sqlalchemy.engine.base.Engine:1235][MainThread] SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1
2016-12-18 21:30:08,675 INFO  [sqlalchemy.engine.base.Engine:1236][MainThread] ()
2016-12-18 21:30:08,676 INFO  [sqlalchemy.engine.base.Engine:1235][MainThread] SELECT CAST('test unicode returns' AS VARCHAR(60)) AS anon_1
2016-12-18 21:30:08,676 INFO  [sqlalchemy.engine.base.Engine:1236][MainThread] ()
2016-12-18 21:30:08,676 INFO  [sqlalchemy.engine.base.Engine:1140][MainThread] PRAGMA table_info("models")
2016-12-18 21:30:08,676 INFO  [sqlalchemy.engine.base.Engine:1143][MainThread] ()
2016-12-18 21:30:08,677 INFO  [sqlalchemy.engine.base.Engine:1140][MainThread]
CREATE TABLE models (
        id INTEGER NOT NULL,
        name TEXT,
        value INTEGER,
        CONSTRAINT pk_models PRIMARY KEY (id)
)


2016-12-18 21:30:08,677 INFO  [sqlalchemy.engine.base.Engine:1143][MainThread] ()
2016-12-18 21:30:08,678 INFO  [sqlalchemy.engine.base.Engine:719][MainThread] COMMIT
2016-12-18 21:30:08,679 INFO  [sqlalchemy.engine.base.Engine:1140][MainThread] CREATE UNIQUE INDEX my_index ON models (name)
2016-12-18 21:30:08,679 INFO  [sqlalchemy.engine.base.Engine:1143][MainThread] ()
2016-12-18 21:30:08,679 INFO  [sqlalchemy.engine.base.Engine:719][MainThread] COMMIT
2016-12-18 21:30:08,681 INFO  [sqlalchemy.engine.base.Engine:679][MainThread] BEGIN (implicit)
2016-12-18 21:30:08,682 INFO  [sqlalchemy.engine.base.Engine:1140][MainThread] INSERT INTO models (name, value) VALUES (?, ?)
2016-12-18 21:30:08,682 INFO  [sqlalchemy.engine.base.Engine:1143][MainThread] ('one', 1)
2016-12-18 21:30:08,682 INFO  [sqlalchemy.engine.base.Engine:719][MainThread] COMMIT

成功です! 現在の作業ディレクトリに 「tutorial.sqlite」ファイルがあるはずです。これは、単一のテーブルが定義されたSQLiteデータベースです( 「modeles」)。

アプリケーションを起動する(Start the application)

アプリケーションを起動します。 「pserve」の詳細については この「pserve」は何ですか? を参照してください。

UNIXの場合(On UNIX)

$ $VENV/bin/pserve development.ini --reload

Windowsの場合(On Windows)

c:\tutorial> %VENV%\Scripts\pserve development.ini --reload

注釈

OSでファイアウォールがあれば、Pythonがネットワーク接続を受け入れることを許可するダイアログボックスが表示されます。

成功した場合、コンソールに以下のようなメッセージが表示されます。

Starting subprocess with file monitor
Starting server in PID 44078.
Serving on http://localhost:6543
Serving on http://localhost:6543

これはサーバーがリクエストを受け入れる準備ができていることを意味します。

ブラウザでアプリケーションにアクセスする(Visit the application in a browser)

ブラウザで http://localhost:6543/ を見てください。生成されたアプリケーションのデフォルトページが表示されます。

あなたが気づくことの1つは、ページの右側の「デバッグツールバー」アイコンです。アイコンの内容について詳しくは、デバッグツールバー を参照してください。開発中にアプリケーションに関する情報を取得できます。

「Alchemy」 cookcutterがあなたのために作った決定(Decisions the alchemy cookiecutter has made for you)

「alchemy」cookiecutterを使ってプロジェクトを作成すると、以下の前提が成り立ちます:

  • ほぼすべてのSQLデータベースをSQLAlchemyで使用できますが、永続ストレージとしてSQLiteを使用します。
  • データベースアクセスツールの場合、 SQLAlchemy を使用します。
  • あなたはURLをコードにマップするために URL dispatch を使います。
  • zope.sqlalchemypyramid_tm 、および transaction パッケージを使用して、リクエストに対するセッションをスコープします。
  • テンプレートをレンダリングするためにpyramid_jinja2_を使いたいと思っています。異なるテンプレートエンジンの使用もできますが、チュートリアルを作成するには1つを選択する必要がありました。いくつかのオプションについては 利用可能なアドオンテンプレートシステムバインディング を参照してください。

注釈

Pyramid は永続ストレージ機構(オブジェクトデータベースやファイルシステムファイルなど)をサポートします。また、URLをコード( traversal )にマップする追加のメカニズムもサポートしています。ただし、このチュートリアルでは、URL dispatchSQLAlchemy のみを使用します。