【追記】
このコメントにより、ひとまず解決した。
appengine_config.py
というファイルを作り、そのファイルに下記の 1 行を入れてみてはいかがでしょうか。少なくとも SDK 1.5.0 の prerelease では警告は消えています。
webapp_django_version = '0.96'
このとおり、アプリのディレクトリ直下に appengine_config.py というファイルを作って
webapp_django_version = '0.96' #webapp_django_version = '1.2' # 1.2 を使用する場合
の形で、Djangoのバージョンを記述しておけば、アプリそのもののソースには特に(use_library()等を)記述しなくても、指定したバージョンが使用されるようになり、警告も出なくなった。
の続き。
関連:Google グループ
概要
Djangoのバージョンを表示するだけのシンプルなアプリを用意して試してみた。
結果としては、
- use_library()で1.2を指定した場合、正常に切り替わっている。
- use_library()でバージョンを明示する/しないに関わりなく、0.96を使用する限り警告が出る。
となった。
気になるのは、近い将来デフォルトバージョンが切り替わった際、use_library('django','0.96')が正常に効いてくれる(バージョン0.96が使用される)かどうかということ。
余計な不安をあおらないためにも、use_library()を使っていたら、警告は表示しないようにして欲しい。
テスト内容
[1]バージョンを明示しない場合
use_library()を使わないケース。
[2]バージョン1.2を明示した場合
from google.appengine.dist import use_library use_library('django', '1.2')
[3]バージョン0.96を明示した場合
from google.appengine.dist import use_library use_library('django', '0.96')
結果
[1]バージョンを明示しない場合
- Django version: 0.96.400000000000006
- アプリの初回起動時のログには警告が表示される。
[2]バージョン1.2を明示した場合
- Django version: 1.2.5
- 警告は表示されない。
[3]バージョン0.96を明示した場合
- Django version: 0.96.400000000000006
- アプリの初回起動時のログには警告が表示される。
結局、バージョン0.96だとどちらにしても
You are using the default Django version (0.96). The default Django version will change in an App Engine release in the near future. Please call use_library() to explicitly select a Django version. For more information see http://code.google.com/appengine/docs/python/tools/libraries.html#Django
という警告は表示されてしまうようだ。
テストの為に用意したアプリ
app.yaml
application: appid version: 1 runtime: python api_version: 1 handlers: - url: .* script: main.py
main.py
# -*- coding: utf-8 -*- import os # ■【この位置を書き換える】 from google.appengine.ext.webapp import template from google.appengine.ext import webapp from google.appengine.ext.webapp import util import django if getattr(django,'get_version',None): def django_get_version(): return django.get_version() else: def django_get_version(): ver_tuple = django.VERSION ver_str = u'%d' % (ver_tuple[0]) for _v in ver_tuple[1:]: if isinstance(_v, (int,long)): fmt = u'%s.%d' elif isinstance(_v, float): fmt = u'%s.%.15f' elif isinstance(_v, basestring): fmt = u'%s %s' else: continue ver_str = fmt % (ver_str, _v) return ver_str DJANGO_VERSION=django_get_version() def django_get_version(): return DJANGO_VERSION class MainHandler(webapp.RequestHandler): def get(self): template_values = { 'text': u'Django version: '+django_get_version() } path = os.path.join(os.path.dirname(__file__), 'index.html') self.response.out.write(template.render(path, template_values)) def main(): application = webapp.WSGIApplication([('/', MainHandler)], debug=True) util.run_wsgi_app(application) if __name__ == '__main__': main()
index.html
<html> <head><title>{{text}}</title></head> <body>{{text}}</body> </html>