Python 2 ライブラリの使用

サードパーティ ライブラリが C 拡張機能を使用していない純粋な Python コードであれば、そのライブラリをアプリケーション ディレクトリにコピーして使用できます。サードパーティ ライブラリがランタイムにバンドルされている組み込みライブラリである場合、アプリにコピーせずにライブラリを使用できます。

サードパーティ ライブラリは、C 拡張機能を使用しない純粋な Python コードとして実装する必要があります。アプリケーション ディレクトリにコピーされたサードパーティ ライブラリは、ファイル割り当てに加算されます。ライブラリがアプリケーション コードと一緒に App Engine にアップロードされるためです。

サードパーティ ライブラリをコピーする

ランタイムにバンドルされている組み込みライブラリのリストに含まれていないサードパーティ ライブラリを使用する手順は次のとおりです。

  1. サードパーティ ライブラリの保存先ディレクトリ(例: lib/)を作成します。

    mkdir lib
    
  2. pip(バージョン 6 以降)に -t <directory> フラグを指定して、前のステップで作成したフォルダにライブラリをコピーします。次に例を示します。

    pip install -t lib/ <library_name>
    

    macOS で Homebrew Python を使用している場合

  3. appengine_config.py という名前のファイルを app.yaml ファイルと同じフォルダに作成します。

  4. 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 component 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 データストアとの互換性がありません。App Engine データ モデリング ライブラリ(db または ndb)を Django アプリケーションで使用することはできます。しかし、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.yamllibraries セクションに PIL を追加して PIL ライブラリを使用できるようにすると、JPEG 画像と TIFF 画像での書き込みも自動的に AGG バックエンドでサポートされます。

matplotlib には、自動的に使用できるさまざまなフォントが付属しています。カスタムのフォントを使用するには、アプリケーションとともにそのフォントを TTF 形式でアップロードし、フォントが格納されているパス(アプリケーションのディレクトリに対する相対パス)を TTFPATH 環境変数に設定します。詳細については app.yaml リファレンスをご覧ください。

App Engine では matplotlib のいくつかの機能がサポートされません。具体的には次のとおりです:

  • ~/.matplotlib ディレクトリは存在せず、上述のとおり matplotlibrc 構成ファイルは別の場所に格納されます。
  • インタラクティブなバックエンドと GUI 要素はサポートされません。
  • EMF、Cairo、GDK の各バックエンドはサポートされません。
  • キャッシングが行われないため、通常であればキャッシュされるデータは、さまざまなメカニズムにより再計算または再ダウンロードされます。無効になっているキャッシング メカニズムには、たとえば、フォントデータ(matplotlib.font_manager.FontManager.findfont により計算される)、サンプルデータ(matplotlib.cbook.get_sample_data によりダウンロードされる)、財務データ(matplotlib.finance.fetch_historical_yahoo によりダウンロードされる)が含まれます。
    • キャッシングが行われないため、examples.downloadFalse に設定されていない限り、asfileobj=False を指定して [matplotlib.cbook.get_sample_data](http://matplotlib.org/api/cbook_api.html#matplotlib.cbook.get_sample_data) を呼び出すことはできません。
  • 外部コマンドを呼び出す機能はすべて無効になっています。
    • fontconfig は使用できません。フォントは上記のメカニズムで検出されます。
    • テキストの表示に LaTeX を使用することはサポートされません。text.usetexTrue に設定すると機能しません。
    • 外部の PostScript ディスティラー プログラムの使用はサポートされません。ps.usedistillerghostscriptxpdf に設定すると機能しません。
    • 外部の動画エンコード プログラムの使用はサポートされません。matplotlib.animation.Animation.save メソッドが機能しないため、matplotlib.animation パッケージは無効です。
    • matplotlib.cbook.report_memory 関数と matplotlib.cbook.MemoryMonitor クラスはサポートされていません。
  • matplotlib.test 関数は無効になっています。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Python 2 の App Engine スタンダード環境