昨日のデスクトップアプリモードに続き、今日は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