2011年12月11日日曜日

GAE SDK1.6 Python2.7

GAEがSDK1.6でPython2.7に対応したが既存のアプリを2.7にはDatastoreを利用している場合、移行できない。また local server は2.7に対応していない。  

 

既存のアプリケーションで Datastore を一切使用していない場合 app.yaml を変更して

runtime: python27
# runtime: python
api_version: 1
threadsafe: true  #マルチスレッドで動かす

- url: .*
# script: main.py
   script: main.app
python2.7 に移行することができるのかもしれないが、Datastoreを使用していた場合 Deploy の際、以下のエラーとなる。
Error 400: --- begin server output ---
The 'python27' runtime is only supported for apps using the High Replication Datastore.
 

Local Serverは2.7対応していないがコマンドラインからの実行もあるのでベースは2.7に変更することにした。  

インストールされているバージョンを確認 

$ port select --list python
Available versions for python:
 none
 python25 (active)
 python25-apple
 python26-apple
 python27
 

2.7 に変更 

$sudo port select python python27
Password:
Selecting 'python27' for 'python' succeeded. 'python27' is now active.
 

参考: macports python_select command not found
 

 

GoogleAppEngineLauncherは2.5固定
(python2.7に対応していない。Preferenceを2.7に変更しても2.5に戻される)

 

*** Running dev_appserver with the following flags:
    --admin_console_server= --port=8080
Python command: /opt/local/bin/python2.5
WARNING  2011-12-11 05:39:58,528 urlfetch_stub.py:111] No ssl package found. urlfetch will not be able to validate SSL certificates.
WARNING  2011-12-11 05:39:58,828 rdbms_mysqldb.py:90] The rdbms API is not available because the MySQLdb library could not be loaded.
INFO     2011-12-11 05:39:59,444 dev_appserver_multiprocess.py:637] Running application dev~snsimglink on port 8080: http://localhost:8080
WARNING  2011-12-11 05:40:10,308 py_zipimport.py:139] Can't open zipfile /opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/setuptools-0.6c11-py2.5.egg-info: IOError: [Errno 13] file not accessible: '/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/setuptools-0.6c11-py2.5.egg-info'
INFO     2011-12-11 05:40:11,033 dev_appserver.py:2753] "GET / HTTP/1.1" 200 -
 

 

HRD


Error 400: --- begin server output ---
The 'python27' runtime is only supported for apps using the High Replication Datastore.
--- end server output ---
If deploy fails you might need to 'rollback' manually.
The "Make Symlinks..." menu option can help with command-line work.
*** appcfg.py has finished with exit code 1 ***

 

 

参考: 【備忘録】 GAEでPython2.5からPython2.7へマイグレーションするには

GAEでのDjangoの使い方は2通りある(と思って)います。

フレームワークとして使う(というか、生Djangoとして使う)

この場合settings.pyが必要になります。
書くべき中身は渡邉さんの引用したURLに書いてある通りですが、元ネタはDjangoの配布物に含まれています
ので、これをコピーして書き換えることになります(多分・・・自信無いですが一応動いた実績あり)。

Djangoのテンプレートエンジンをwrapした、google.appengine.ext.webapp.templateとして使う

GAE/Py2.5でそうしていた場合、GAE/Py2.7に切り替える際、あなたはプログラム上は何も変える必要がありません(※)。
Python2.7環境で上記をimportすると、中身はDjango1.2になっているからです。
やるべきことはDjango0.9.6と1.2の差分であるテンプレートエンジンの挙動の違いを、テンプレート側で
吸収してあげることです(デフォルトエスケープの扱いとか)。
※Python2.7対応はまた別の話です。

Migration Python2.7への移行

1. 以前のプログラムのソースをダウンロードして、 app.xml を変更して deployする 503 python -V // まず Mac にインストールされている python のバージョンを確認 504 pwd 505 curl https://sdk.cl...