前回の記事でpythonのライブラリ管理ツールであるzc.buildoutを一通り触ってみましたが、
今回はこのzc.buildoutを使ってGoogle App Engineの外部ライブラリを管理する仕組みを構成してみます。
やるべきこと
前回の記事ではとりあえず外部ライブラリを.egg
形式でダウンロードしてくることに成功しました。
ここからGoogle App Engineの外部ライブラリ管理までにやらなければならないこととして、ざっと以下のようなことが考えられます。
.egg
に圧縮しない状態でインストールしたい- 外部ライブラリは
import xxx
形式で使うと思われるので、圧縮せず.py
形式でインストールしたいです
- 外部ライブラリは
- インストール先を指定したい
- インストールした外部ライブラリをGoogle App Engineで使えるように設定する
- せっかくインストールしてきても、配置してデプロイしただけでは使えなさそうですよね...
パスを通すとかする必要がありそうです
- せっかくインストールしてきても、配置してデプロイしただけでは使えなさそうですよね...
やってみる
さて、上で挙げたことを1つ解決しながら、Google App Engineの外部ライブラリ管理のためのセットアップを行います。
.eggに圧縮しない状態でインストール & インストールディレクトリ指定
上記1と2を両方満たしてくれるrecipe(*1)がありました。
appfy.recipe.gaeというライブラリです。(ソースコードはこちら)
このrecipeはeggs
に指定したライブラリを圧縮しないでインストールするほか、
lib-directory
というオプションに指定したディレクトリにインストールすることができます。
というわけで、buildout.cfg
には次のように記述します。
[buildout] parts = packages [packages] recipe = appfy.recipe.gae:app_lib lib-directory = libs use-zipimport = false eggs = [インストールしたいライブラリ] # Don't copy files that match these glob patterns. ignore-globs = *.c *.pyc *.pyo */test */tests */testsuite */django */sqlalchemy *.so # Don't install these packages or modules. ignore-packages = distribute setuptools easy_install site pkg_resources
lib-directory
にlibs
と書いたので、libs
ディレクトリにeggファイルが解凍された状態でインストールされます。
(*1) recipeとは、eggs
に記述したeggをどのように処理するかを定義したもので、その実体はPyPIにあるパッケージです。
参考:Buildoutを使う 設定ファイル編 - 箱が…
Google App Engine側の設定ファイル
先ほどのlibs
ディレクトリをGAEで読み込むように設定しましょう。
appengine_config.py
に次のように記述します。
appengine_config.py
import os import sys ROOTPATH = os.path.dirname(__file__) LIBPATH = os.path.join(ROOTPATH, 'libs') sys.path.append(LIBPATH)
これだけ。
インストール先をlibs
以外にした場合は、'libs'
を変更します。
また、djangoを使っている場合、settings.py
のINSTALLED_APPS
にインストールしたライブラリ名を記述します。
(これは必須ではないかもしれません)
settings.py(django)
INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', ... [インストールしたライブラリ(のディレクトリ名?)] )
これで完了です!
リファレンス
Google App Engine (GAE/py) の開発環境をつくる — 清水川Web
"site-packages に悩まされず"に buildout で GoogleAppEngine の環境を作る - TIM Labs