サードパーティ ライブラリが C 拡張機能を使用していない純粋な Python コードであれば、そのライブラリをアプリケーション ディレクトリにコピーして使用できます。サードパーティ ライブラリがランタイムにバンドルされている組み込みライブラリである場合、アプリにコピーせずにライブラリを使用できます。
サードパーティ ライブラリは、C 拡張機能を使用しない純粋な Python コードとして実装する必要があります。アプリケーション ディレクトリにコピーされたサードパーティ ライブラリは、ファイル割り当てに加算されます。ライブラリがアプリケーション コードと一緒に App Engine にアップロードされるためです。
サードパーティ ライブラリをコピーする
ランタイムにバンドルされている組み込みライブラリのリストに含まれていないサードパーティ ライブラリを使用する手順は次のとおりです。
サードパーティ ライブラリの保存先ディレクトリ(例:
lib/
)を作成します。mkdir lib
pip(バージョン 6 以降)で
-t <directory>
フラグを指定して、前のステップで作成したフォルダにライブラリをコピーします。次に例を示します。pip install -t lib/ <library_name>
macOS で Homebrew Python を使用している場合
Homebrew の問題
macOS で Homebrew Python を使用している場合、
pip install -t
を実行すると例外が発生する可能性があります。この問題は、Python の Homebrew の構成による、既知の Homebrew インストールの問題(Note on pip install --user
を参照)に関連するものです。この問題を回避するには、ホーム ディレクトリ内に~/.pydistutils.cfg
という名前で、次の内容のファイルを一時的に作成します。[install] prefix=
App Engine アプリケーション用のパッケージをインストールした後は、必ずこのファイルを削除してください。このファイルが存在していると、このコンテキスト以外では、他のパッケージをインストールできなくなります。
app.yaml
ファイルと同じフォルダに、appengine_config.py
という名前のファイルを作成します。appengine_config.py
ファイルを編集し、vendor.add()
メソッドにライブラリ ディレクトリを指定します。# appengine_config.py from google.appengine.ext import vendor # Add any libraries install in the "lib" folder. vendor.add('lib')
この例の
appengine_config.py
ファイルでは、現在の作業ディレクトリがlib
フォルダの置かれているディレクトリであるものと想定しています。単体テストなどの一部のケースでは、現在の作業ディレクトリはこれとは異なる場合があります。エラーが発生しないようにするために、lib
フォルダのフルパスを次のようにして明示的に指定できます。vendor.add(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib'))
コピーしたライブラリで pip
要件ファイルを使用する
pip
では、インストールが必要なライブラリのリストを、要件ファイルというファイルから読み取ることができます。要件ファイルを使用することにより、アプリの新しい開発環境のセットアップや、新しいバージョンのライブラリへのアップグレードが容易になります。
要件ファイルは、ライブラリごとに 1 行ずつ、パッケージ名とバージョンがリストされているテキスト ファイルです。
Flask==0.10
Markdown==2.5.2
google-api-python-client
要件ファイルからライブラリをインストールするには、-t lib
フラグと、-r
フラグを使用します。
pip install -t lib -r requirements.txt
ランタイムにバンドルされている組み込みのサードパーティ ライブラリを使用する
サードパーティ ライブラリが App Engine Python ランタイムにバンドルした組み込みライブラリのリストにある場合は、たとえば以下のように app.yaml
内の libraries ディレクティブにそのライブラリを指定するだけで使用できます。
libraries:
- name: PIL
version: "1.1.7"
- name: webob
version: "1.1.1"
App Engine はデプロイ時に、リクエストされているライブラリを自動的に提供します。
バンドルされた組み込みライブラリをローカル開発サーバーで使用する
ランタイムによって提供される組み込みライブラリの多くは、自動的にローカル開発サーバーで利用可能になります。一部のライブラリでは、ローカルにインストールするために gcloud components install app-engine-python-extras
を実行する必要があります。ローカル開発用サーバーが、このコンポーネントが必要であることを検出すると、インストールを求めるメッセージを表示します。次の組み込みライブラリは、ローカル開発用サーバーで使用する前にローカルにインストールする必要があります。
上記パッケージのすべては、次の pip コマンドを使用して Python パッケージ インデックス(PyPI)からインストールできます。
sudo pip install lxml==2.3.5
お使いのプラットフォームによっては、これらのライブラリをインストールするために、ビルド サポートツールや Python ソースをインストールすることが必要な場合があります。
- Linux の場合、パッケージ管理システムよってこれらの前提条件を提供できます。多くの場合、パッケージ管理システムはライブラリのビルド済みバージョンを提供することもできます。
- Windows の場合、通常は、ビルド済みバージョンのインストーラを入手できます。
- macOS の場合、一部のパッケージをビルドするには、Xcode コマンドライン ツールが必要です。
開発用サーバーでは、app.yaml
内に指定されているバージョンに関係なく、ローカルにインストールされているパッケージ パージョンが使用されます。必要に応じて、プロジェクトの virtualenv を設定して、正確なパッケージ バージョンを指定してください。virtualenv は、ローカルにこれらのバイナリ パッケージにのみ使用され、デプロイ済みのアプリケーションには使用できないことに注意してください。別のサードパーティ ライブラリを追加するには、ライブラリのインストールで説明されている方法を使用します。
ローカル開発用サーバーで Django を使用する
Django は、さまざまな機能を備えた、Python 用のウェブ アプリケーション フレームワークです。ディスパッチ、ビュー、ミドルウェア、テンプレート用コンポーネントをはじめ、互換性のある多数のコンポーネントが用意されています。
Django データ モデリング インターフェースは、App Engine データストアとの互換性がありません。Django アプリケーションでは、App Engine データ モデリング ライブラリ(db または ndb)を使用できます。ただし、Django データ モデリング インターフェースを使用するサードパーティの Django アプリケーション(特に Django の Admin アプリケーション)は、App Engine で直接動作しない可能性があります。
データストア モデリング ライブラリ(DB)がデフォルトです。代わりに NDB ストレージ API を Django で使用するには、'google.appengine.ext.ndb.django_middleware.NdbDjangoMiddleware',
を Django の settings.py
ファイルの MIDDLEWARE_CLASSES
エントリに追加します。追加する際には、他のミドルウェア クラスの前に挿入することをおすすめします。このミドルウェアより前にデータストア呼び出しを行う他のミドルウェアが呼び出されると、それが正常に処理されないことがあるためです。Django ミドルウェアに関する詳細は、プロジェクトのドキュメントをご覧ください。
アプリで Django を有効にするには、次のように app.yaml
で WSGI アプリケーションと Django ライブラリを指定します。
...
handlers:
- url: /.*
script: main.app # a WSGI application in the main module's global scope
libraries:
- name: django
version: "1.4"
DJANGO_SETTINGS_MODULE
環境変数は、パッケージをインポートする前に、Django 設定モジュールの名前(通常は 'settings'
)に設定しておく必要があります。
Django 設定モジュールが settings.py
以外の場合は、それに応じて app.yaml
ファイルでも DJANGO_SETTINGS_MODULE
環境変数を設定します。
env_variables:
DJANGO_SETTINGS_MODULE: 'myapp.settings'
または、Python コードで次のように設定します。
import os
# specify the name of your settings module
os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'
import django.core.handlers.wsgi
app = django.core.handlers.wsgi.WSGIHandler()
ローカル開発用サーバーで matplotlib
を使用する
matplotlib は、さまざまな画像形式でグラフや図を作成するプロット ライブラリです。App Engine では、matplotlib のインタラクティブ モードはサポートされていません。また、他の多くの機能もご利用いただけません。つまり、多くの matplotlib チュートリアルで示されている pyplot.show()
は使用できません。代わりに、画像データを出力ストリームに書き込む pyplot.savefig()
、cStringIO.StringIO
インスタンス、または Cloud Storage クライアント ライブラリを介して Google Cloud Storage を使用してください。
matplotlib では、matplotlibrc
構成ファイルを使用すると幅広いカスタマイズが可能です。この構成ファイルは、アプリケーションの最上位ディレクトリに配置する必要があります。あるいは、MATPLOTLIBRC
環境変数に、アプリケーションのディレクトリへの相対パスを設定してください。
デフォルトのバックエンドである AGG では、サポートされているすべての形式のファイルを書き込めます。サポートされている形式は、PNG(デフォルト)、RAW、PS、PDF、SVG、SVGZ です。app.yaml
の libraries
セクションに PIL
を追加して PIL ライブラリを使用できるようにすると、JPEG および TIFF 画像形式での書き込みも自動的に AGG バックエンドでサポートされます。
matplotlib には、自動的に使用できるさまざまなフォントが付属しています。カスタムのフォントを使用するには、アプリケーションとともにそのフォントを TTF 形式でアップロードし、フォントが格納されているパス(アプリケーションのディレクトリに対する相対パス)を TTFPATH
環境変数に設定します。詳細については、app.yaml
リファレンスをご覧ください。
App Engine では matplotlib のいくつかの機能がサポートされません。具体的には次のとおりです:
~/.matplotlib
ディレクトリはありません。ただし、上述のとおりmatplotlibrc
matplotlibrc 構成ファイルは別の場所に格納されます。- インタラクティブなバックエンドと GUI 要素はサポートされません。
- EMF、Cairo、GDK の各バックエンドはサポートされません。
- キャッシュ保存されないため、通常であればキャッシュに保存されるデータは、さまざまなメカニズムにより再計算または再ダウンロードされます。無効になっているキャッシュ保存メカニズムには、たとえば、フォントデータの
matplotlib.font_manager.FontManager.findfont
による計算、サンプルデータのmatplotlib.cbook.get_sample_data
によるダウンロード、財務データのmatplotlib.finance.fetch_historical_yahoo
によるダウンロードがあります。- キャッシュ保存されないため、
examples.download
がFalse
に設定されていない限り、asfileobj=False
を指定して[matplotlib.cbook.get_sample_data](http://matplotlib.org/api/cbook_api.html#matplotlib.cbook.get_sample_data)
を呼び出すことはできません。
- キャッシュ保存されないため、
- 外部コマンドを呼び出す機能はすべて無効になっています。
fontconfig
は使用できません。フォントは上記のメカニズムで検出されます。- テキストの表示に LaTeX を使用することはサポートされません。
text.usetex
をTrue
に設定しても機能しません。 - 外部の PostScript ディスティラー プログラムの使用はサポートされません。
ps.usedistiller
をghostscript
やxpdf
に設定しても機能しません。 - 外部の動画エンコード プログラムの使用はサポートされません。
matplotlib.animation.Animation.save
メソッドが機能しないため、matplotlib.animation
パッケージは使用できません。 matplotlib.cbook.report_memory
関数とmatplotlib.cbook.MemoryMonitor
クラスはサポートされません。
matplotlib.test
関数は無効になっています。