昨日のデスクトップアプリモードに続き、今日はpgAdmin 4 Beta 1をウェブアプリとして動かす編。昨日作ったポータブル版フォルダ ↓ をそのまま使います。実行環境は同じWindows 7 x64。 基本は簡単で、フォルダwebにあるpgAdmin4.pyをPython2.7インタプリタで起動し、ブラウザでlocalhost:5050を開くだけ。必要なライブラリはインストーラに最初から全部入ってます。あとはパスを通せばよく、方法はいろいろありますがvenvフォルダにインタプリタを持ってくれば環境変数いらずで楽。要するに ↓ こんな構成。
pgAdmin 4
  ┗ v1
   ┣ docs
   ┣ installer
   ┣ runtime
   ┣ venv
   ┃ ┣ python27.dll
   ┃ ┗ python.exe
   ┗ web
     ┗ pgAdmin4.py
Windows版Python2.7は、以前Python3.3の最小ポータブル版を用意したのと同様にしました。注意するのは32ビット版を使うこと。概要は次のとおり。 Download the latest version of Python → 2.7系の最新版のWindows x86 MSI installerをダウンロード コマンドでstart /wait msiexec /a python-2.7.x.msi targetdir="展開先" /qn 今回、Pythonのバージョンは2.7.11でした。展開先のpython.exe, python.dllをフォルダvenvにコピーし、そこをカレントにしてpgAdmin4.pyを起動します。
cd "[...]pgAdmin 4/v1/venv"
python "../web/pgAdmin4.py
上はConEmuですが、コマンドプロンプトでも動作は同じ。起動に成功すると何もメッセージが出ず、入力を受け付けなくなります(強制終了のCtrl-Cのみ有効)。バックグラウンドでの実行や、ちゃんと終了させる方法等は明日以降に検討します。 サーバ・アプリが確かに起動してる確認は、もう一つコンソールを開きnetstat -a pgAdmin4のデフォルトポートが5050なので、localhostのそれがLISTENINGになっていれば起動しているはず。あとは好きなブラウザで開けばOK。今回はFirefox 47で確認しました。 昨日のデスクトップアプリモードも内部は同じPythonウェブアプリ、表示部もWebKitなのでほとんど同じ。微妙な違いとして、例えば一番上のメニュー(File等)がデスクトップ版は普通のメニューバー、ブラウザ版は画面内のプルダウンになってます。 試しに、以前紹介したPortable QGIS Swiss Editionから少し古いPython 2.7.4を持ってきたら ↓ のエラーが出て起動失敗。2.7なら何でも良いわけではないようです。
r:\pgAdmin 4\v1\venv>python -V
Python 2.7.4

r:\pgAdmin 4\v1\venv>python "../web/pgAdmin4.py"
Traceback (most recent call last):
  File "../web/pgAdmin4.py", line 24, in 
    from pgadmin import create_app
  File "r:\pgAdmin 4\v1\web\pgadmin\__init__.py", line 13, in 
    from flask import Flask, abort, request, current_app
  File "r:\pgAdmin 4\v1\venv\lib\site-packages\flask\__init__.py", line 21, in 
    from .app import Flask, Request, Response
  File "r:\pgAdmin 4\v1\venv\lib\site-packages\flask\app.py", line 26, in 
    from . import json
  File "r:\pgAdmin 4\v1\venv\lib\site-packages\flask\json.py", line 25, in 
    from itsdangerous import json as _json
  File "r:\pgAdmin 4\v1\venv\lib\site-packages\itsdangerous.py", line 14, in 
    import hmac
  File "r:\pgAdmin 4\v1\venv\lib\hmac.py", line 8, in 
    from operator import _compare_digest as compare_digest
ImportError: cannot import name _compare_digest