webapp2 は最近の SDK (google_appengine/lib/webapp2) に含まれています。新しい SDK を使用するか、webapp2 をインポートしない場合は、うまくいくはずです。
少し異なるビルドアウトのセットアップに興味がある場合は、1 つ含めました。
私はビルドアウトに rod.recipe.appengine を使用してきましたが、非常に満足しています。PyCrypto のインポートなどを修正する必要がある場合は、アプリ エンジン SDK にパッチを適用することもできます。
ボボの例と他のソースに基づいて構成を作成しました。以下の例では、dist.plone.org から PIL などの依存関係を取得できます。フォーム処理用の wtforms と暗号化の利便性のための gdata を取得し、インポート前に sys.path に追加できる packages.zip にそれらを配置しますimport zippedpackages
。 zippedpackages.py は次のようになります
import sys
if 'packages.zip' not in sys.path:
sys.path.insert(0, 'packages.zip')
また、settings.py と app.yaml がテンプレートから生成され、 と のような変数appspotname
がappspotversion
挿入されていることに注意してください。
ビルドアウトは実行中のビルドアウトに基づいていますが、この正確な例はテストされておらず、一部のテンプレートも欠落しています。pypi でさまざまなレシピを調べると、オプションと構文を読むことができます。
テンプレートを使用する場合、最初にテンプレートからファイルを生成するためにビルドアウトを 2 回実行する必要がある場合があります (セットアップの src ディレクトリにあります)。次に、parts ディレクトリ (SDK の実行元) へのシンボリック リンクを作成します。テンプレートが必要ない場合は、ビルドアウトから削除して、通常どおりに設定してください。virtualenv の代わりに Egg を使用すると、異なる virtualenv を使用する代わりに、構成としてライブラリを切り替えることができます。ただし、ライブラリのバージョンはめったに変更されないため、大きな問題ではありません。卵で問題が発生した場合は、SDK インポート マジックがサイト パッケージとある程度の virtualenv を認識しているが、卵は認識していないことにも注意してください。
[buildout]
appspotname = progect
appspotversion = dev
versions = versions
develop =
src/progect
parts =
progect
progectconfig
progectsettings
nosetests
noseconfig
zipsymlink
unzip = true
find-links =
http://dist.plone.org/thirdparty/
[progect]
recipe = rod.recipe.appengine
url = http://googleappengine.googlecode.com/files/google_appengine_1.6.6.zip
server-script = dev_appserver
packages =
wtforms
gdata
src = ${buildout:directory}/src/progect
exclude = tests
zip-packages = True
use_setuptools_pkg_resources = True
# We have a patch overriding imports to enable buildout and eggs
#patch = ${buildout:directory}/google_appserver.patch
[progectconfig]
recipe = collective.recipe.template
input = ${buildout:directory}/templates/app.yaml.in
output = ${progect:src}/app.yaml
[progectsettings]
recipe = collective.recipe.template
input = ${buildout:directory}/templates/settings.py.in
output = ${progect:src}/settings.py
[nosetests]
recipe = zc.recipe.egg
eggs =
NoseGAE
WebTest
progect
nose
extra-paths =
${buildout:directory}/etc
${buildout:directory}/parts/google_appengine
${buildout:directory}/parts/google_appengine/lib/antlr3
${buildout:directory}/parts/google_appengine/lib/django_1_3
${buildout:directory}/parts/google_appengine/lib/fancy_urllib
${buildout:directory}/parts/google_appengine/lib/ipaddr
${buildout:directory}/parts/google_appengine/lib/webob_1_1_1
${buildout:directory}/parts/google_appengine/lib/webapp2/
${buildout:directory}/parts/google_appengine/lib/yaml/lib
${buildout:directory}/parts/google_appengine/lib/simplejson
${buildout:directory}/parts/google_appengine/lib/graphy
interpreter = python
[noseconfig]
recipe = collective.recipe.template
input = ${buildout:directory}/templates/setup.cfg.in
output = ${buildout:directory}/setup.cfg
[zipsymlink]
recipe = svetlyak40wt.recipe.symlinks
path = ${progect:src}
files = ${progect:app-directory}/packages.zip
[versions]
Django = 1.3
gdata = 2.0.16
lxml = 2.3
PIL = 1.1.7
PyCrypto = 2.3
setuptools = 0.6c11
webapp2 = 2.3
WebOb = 1.1.1
WTForms = 1.0.1
# Tools and dependencies
svetlyak40wt.recipe.symlinks = 0.2.1
app.yaml テンプレートは次のようになります
application: ${buildout:appspotname}
version: ${buildout:appspotversion}
runtime: python27
threadsafe: true
api_version: 1
libraries:
- name: PIL
version: "${versions:PIL}"
- name: pycrypto
version: "${versions:PyCrypto}"
- name: django
version: "${versions:Django}"
- name: lxml
version: "${versions:lxml}"
- name: setuptools
version: "${versions:setuptools}"
- name: webapp2
version: "${versions:webapp2}"
- name: webob
version: "${versions:WebOb}"
handlers:
- url: /.*
script:hello_world.app
- url: /_ah/queue/deferred
script: google.appengine.ext.deferred.application
login: admin
builtins:
- deferred: on
ノーズ テスト構成テンプレート、src ディレクトリに対してテストを実行 (メインの代替パーツ/プロジェクトとは対照的に):
[nosetests]
verbosity=1
detailed-errors=1
with-gae=1
gae-application=${progect:src}
gae-lib-root=${buildout:directory}/parts/google_appengine
where=${progect:src}
これをセットアップしたいときは、ビルドアウトのルート ディレクトリに移動して、次のように入力します。
/path/to/appropriate/python bootstrap.py --distribute
bin/buildout -c buildout.cfg
そして、私は走ることができbin/nosetests
ますbin/dev_appserver parts/progect