Pythonが同梱されなくなる
playframework1ではplayアプリケーションを管理するために沢山のスクリプトがpythonで書かれています。JavaVMの起動の遅さ、OSに関わる処理のやりにくさなどの理由でJavaではなくPythonを採用したそうです。
PythonはOS依存せず高速動作し書きやすいですが、残念ながらWindowsには標準でインストールされていません。そこでplayframeworkではpythonも一緒に同梱するアプローチを採っています。
で、今まで同梱されてたpythonのバージョンは2系でした。(現在のpythonは3系に主流が移っていますが、playframework1が誕生したのは2007年頃ですのでこれは仕方ないことですね。)
play1.7.0からはpythonで書かれたスクリプトがすべてpython3対応されるとともに、python2の同梱も廃止となりました。
Windows環境ではPython3のインストールが必要
pythonがバンドルされなくなったので windows環境で使用する場合はまずpython3をインストールしなくてはなりません。
Python Releases for Windows | Python.org
https://www.python.org/downloads/windows/
このあたりから自分に合った版を選んでインストールすればいいです。pipでモジュール管理するのであれば素直にインストーラを用いるのがいいと思います。
今まで同梱Pythonがあったフォルダには代わりに requirements.txt
というファイルが置かれています。これは依存しているモジュールを記したファイルなので、これを引数にして pip経由でモジュールを追加しましょう。
C:\> py -m pip install -r play-1.7.1\python\requirements.txt
また、これとは別に windows環境の場合は pywin32
というモジュールも必要なようです。インストールされていないと下記のようなエラーが出ます。
No module named 'win32pdh'
File "C:\play1\bin\play-1.7.1\framework\pym\play\commands\daemon.py", line 14, in <module>
import win32pdh, win32pdhutil
ModuleNotFoundError: No module named 'win32pdh'
直接 pywin32
を指定してインストールします。
C:\> py -m pip install pywin32
プロキシ経由するとき
pip.ini経由でプロキシ設定したりする方法もありますが、私は環境変数を用いた方法を使いました。
SET HTTP_PROXY=http://user:pass@192.168.0.10:8080
SET HTTPS_PROXY=http://user:pass@192.168.0.10:8080
最後に
python3が正しくインストールされていればお馴染みの画面が表示されるはずです。
C:\play1\workspace>play
~ _ _
~ _ __ | | __ _ _ _| |
~ | '_ \| |/ _' | || |_|
~ | __/|_|\____|\__ (_)
~ |_| |__/
~
~ play! 1.7.1, https://www.playframework.com
~
~ Usage: play cmd [app_path] [--options]
~
~ with, new Create a new application
~ run Run the application in the current shell
~ help Show play help
~
おまけ
モジュールにも command.py というスクリプトがあります。そのため play-1.7系ではそのままでは動かなくなっています。play deps 直後にエラーを吐いちゃったり。。
~ !! Error while loading C:\play1\workspace\aaaa\modules\launcher-0.1.1\commands.py: Missing parentheses in call to 'print'. Did you mean print(…)? (commands.py, line 23)
~
モジュール側でのPython3対応が期待できない場合は、Python に付属していある 2to3.py というスクリプトを用いてPython3対応が簡単に行えます。