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