Webap2 包含在最近的 SDKs (google_appengine/lib/webapp2) 中。 如果您使用更新的 SDK 或不导入 Webap2, 它应该为您工作 。
如果你对一个稍微不同的建筑计划感兴趣, 我包括了一个。
我一直在用rod.recipe.appengine来建造, 并且非常满意。 它甚至允许您修补应用程序引擎SDK。 如果您需要修补 PyCrypto < a href=", http://code.google.com/ p/googleapengine/issues/ detail?id=4612" rel="nofol" >imports 等。
我根据bobo < a href=" http://code.google.com/p/typhoonae/wiki/AppEngineBuildout" rel=“nofolt” >example 和其他一些来源做了我的配置。下面的例子可以让您从 dist.plone.org 获得像 PIL 这样的依赖性。 它为加密方便的窗体处理和 gdata 提取 wtforms, 并将其放入包中。zip 可以在进口前添加到 sys.path 的包件中。 例如, 在 lippedpackages 看起来像 lippedpackages. py
import sys
if packages.zip not in sys.path:
sys.path.insert(0, packages.zip )
请注意,设置.py 和 app.yaml 是由模板和变量生成的,例如 appspotname
和 appspotversversion
。
构建基于一个运行中的构建, 但这个精确的示例尚未测试, 也缺少一些模板。 如果您查看 Pypi 上的不同配方, 您可以读取选项和语法 。
如果您使用模板, 您可能需要两次运行构建文件, 以便首先从模板中生成文件( 在我设置的 Src 目录中), 然后创建与部件目录( SDK 运行的路径) 的符号链接 。 如果您不想使用模板, 从构建中移除并设置 。 使用 eggs 而不是 evilenv 使您能够将库转换为配置, 而不是有不同的虚拟元件 。 虽然这不是一个大问题, 因为图书馆版本很少改变 。 如果您遇到与鸡蛋有关的问题, 也值得注意的是 SDK 导入的魔法已经意识到了网站包件, 并且在某种程度上是虚拟元件, 但不包括鸡蛋, 所以有些库可能还是要安装在虚拟元箱中 。
[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
nose 测试配置模板, 对 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}
当我想设置这个设置时, 我会去建立 root 目录和类型
/path/to/appropriate/python bootstrap.py --distribute
bin/buildout -c buildout.cfg
然后我就可以运行 >bin/nosetests
或 >bin/dev_app_server parts/ progect
。