Python には 2010-10-01 時点で、バージョンの違いによる 2 つの系統が存在する。3 系と 2 系だ。GAE の本番環境では 2 系の 2.5 が使われている。開発環境と本番環境はできる限り同じ環境であることが望ましい。Mac で GAE SDK を使ってウェブアプリを開発するときにも、2.5 を使う方が良い。
実は数日前まで、GAE SDK (Mac 版の実体は「GoogleAppEngineLauncher.app」)には、Python の実行環境も本番と同一バージョンがふくまれていると思っていた。だから、Mac にインストールされているものが何であれ関係ないのだ、と。ところが、GAE Launcher の「Preferences」には Python のパスを指定するフィールドがある。これはつまり、SDK には Python の実行環境はふくまれておらず、Mac にインストールされているものを使う、という意味ではないだろうか?
で、確かめてみることにした。
Snow Leopard で利用可能な Python のバージョン
まず、Mac OS X Snow Leopard で利用可能な Python のバージョンについて整理しておこう。MacPorts を使えば最新版の 3 系もインストールできるが、ここでは標準でインストールされている Python だけを対象とする。確認は Snow Leopard のバージョン 10.6.4 で行った。ただし、そこに Xcode を中心とした開発ツール(実際には iOS SDK)一式がインストールされた状態のものだ。開発ツールが Python を上書きするかどうかはわからない。手元には素のままの Snow Leopard がないため確認できない。
Snow Leopard には Python の実行環境が 2 種類インストールされている。それも、2 系のものが 2 つだ。それぞれのバージョンを確認してみる。
/usr/bin/python
パス名を見ればわかるように、これが Snow Leopard 標準の Python だ。「標準」というのは、MacPorts 等を使っていない状態で、シェルのプロンプトから python として実行したときに起動されるもの、という意味。
[imac] mnbi% which python /usr/bin/python [imac] mnbi% python --version Python 2.6.1 [imac] mnbi% file /usr/bin/python /usr/bin/python: Mach-O universal binary with 3 architectures /usr/bin/python (for architecture x86_64): Mach-O 64-bit executable x86_64 /usr/bin/python (for architecture i386): Mach-O executable i386 /usr/bin/python (for architecture ppc7400): Mach-O executable ppc [imac] mnbi% python Python 2.6.1 (r261:67515, Feb 11 2010, 00:51:29) [GCC 4.2.1 (Apple Inc. build 5646)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> sys.version '2.6.1 (r261:67515, Feb 11 2010, 00:51:29) \n[GCC 4.2.1 (Apple Inc. build 5646)]' >>> ^D
バージョンは 2.6.1 で、64 ビット版のバイナリもあることがわかる。PowerPC 用のバイナリがあるのが不思議だ。インタプリタを起動して、sys.version
を表示させると、より詳細なバージョン情報を知ることができる。
/usr/bin/python2.5
パス名が変えられていることから、こちらは互換性のために残されているのだろうと推測できる。
[imac] mnbi% which python2.5 /usr/bin/python2.5 [imac] mnbi% python2.5 --version Python 2.5.4 [imac] mnbi% file /usr/bin/python2.5 /usr/bin/python2.5: Mach-O universal binary with 2 architectures /usr/bin/python2.5 (for architecture i386): Mach-O executable i386 /usr/bin/python2.5 (for architecture ppc7400): Mach-O executable ppc [imac] mnbi% python2.5 Python 2.5.4 (r254:67916, Feb 11 2010, 00:50:55) [GCC 4.2.1 (Apple Inc. build 5646)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> sys.version '2.5.4 (r254:67916, Feb 11 2010, 00:50:55) \n[GCC 4.2.1 (Apple Inc. build 5646)]' >>> ^D
バージョンは 2.5.4 で、64 ビット版のバイナリはない。
GAE SDK を動かす Python はどれ?
GAE SDK (GoogleAppeEngineLauncher.app) をパッケージとして開いて、内容を確認してみると、やはり Python 本体は見当たらない。実際に、SDK 上でコードを動かして確認してみよう。GAE Launcher から「File」>「New Application... 」で新規アプリを作り、main.py の MainHandler
を以下のように書き換える。"Hello, world!" の代わりに sys.version
を表示させるわけだ。
import sys class MainHandler(webapp.RequestHandler): def get(self): self.response.out.write(sys.version)
デフォルトの状態で実行させると、Safari に以下の文字列が表示される。
↑で 標準の Python インタプリタに表示させたものと同一だ。
GAE Launcher の「Preferences」で Python 2.5 を指定してみる。
設定した後、バージョン表示用のアプリを立ち上げ直し、Safari でリロードすると以下の文字列が表示される。
結論
- GAE SDK (GoogleAppEngineLauncher.app) には Python の実行環境はふくまれていない。
- このため Mac OS X にインストールされた Python 実行環境で SDK は動いている。
- GAE の本番環境と合わせたいなら Launcher の「Preferences」で Python へのパスを指定する。
標準の Snow Leopard なら /usr/bin/python が使われるはず。MacPorts 等で他のバージョンの Python をインストールしてあり、かつ ~/.MacOSX/environment.plist でログイン環境(の PATH
) をいじってあれば、他のバージョンが使われることもある。
2.5 と 2.6 (あるは 2 系最新の 2.7) にどんな差異があるのかは詳しく調べていないのでよくわからない。だから、2.6 を使ったとして GAE ウェブアプリの開発上で不都合があるかどうかもわからない。けれど、GAE の本番環境が 2.5 だと言うのだから、開発環境も 2.5 にしておく方が無難だ。そのためには、Launcher の「Preferences」で /usr/bin/python2.5
を指定する、と。
「ブログの記事一覧を表示する」アプリでは、(実行環境のバージョンを気にしていなかったので) Snow Leopard 標準の(つまり、2.6)で動作確認していた。それでも何の不都合もなかったけどね。
関連リンク
- 開発環境 (GAE 公式ドキュメントより)
- 26.1 sys -- システムパラメータと関数 (Python ライブラリリファレンス; PyJUG)
0 件のコメント:
コメントを投稿