0

ビルドアウトGoogleアプリエンジンを実行する必要があります。構成ファイル buildout.cfg を書きました:

[buildout]
parts =
    gae_sdk
    gae_tools
    app_lib

unzip = true
relative-paths = true
download-cache = etc/downloads
develop-eggs-directory = etc/develop-eggs
parts-directory = etc/parts


[gae_sdk]
recipe = appfy.recipe.gae:sdk
url = http://googleappengine.googlecode.com/files/google_appengine_1.4.3.zip
destination = ${buildout:parts-directory}
hash-name = false
clear-destination = true


[gae_tools]
recipe = appfy.recipe.gae:tools
sdk-directory = ${gae_sdk:destination}/google_appengine

[app_lib]
recipe = appfy.recipe.gae:app_lib
lib-directory = src/distlib
use-zipimport = false


eggs =
    webapp2

コマンド python <(curl http://python-distribute.org/bootstrap.py ) –distribute を実行した後、./bin/buildout GAE は動作しません。サーバーは動作していますが、GAE サイトからの最も単純な Hello world は間違い importError: No module named webapp2 を示しています。最初に、スクリプトの後に Hello world を実行する必要があります。ファイルとフォルダーの構造は次のとおりです: progect/buildout.cfg progect/src/hello_world.py , app.yaml

file app.yaml:
application: hello_world
version: 1
runtime: python
api_version: 1
threadsafe: true

handlers:
- url: /.*
script:hello_world.app

builtins:
- deferred: on

file hello_world.py:
import webapp2

class MainPage(webapp2.RequestHandler):
def get(self):
self.response.headers = ‘text/plain’
self.response.out.write('Hello, webapp World!')

app = webapp2.WSGIApplication(,
debug=True)
help me, please.
4

2 に答える 2

2

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 がテンプレートから生成され、 と のような変数appspotnameappspotversion挿入されていることに注意してください。

ビルドアウトは実行中のビルドアウトに基づいていますが、この正確な例はテストされておらず、一部のテンプレートも欠落しています。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

于 2012-05-29T11:11:36.830 に答える
0

webapp2 は SDK に含まれていません。ビルドアウト内でサンドボックスまたは virtualenv を使用している場合は、パッケージを Python 環境にインストールするか、ビルドアウトに含める必要があります。

于 2012-05-25T19:45:40.633 に答える