HFP2:Python Anywhere
ゴールは、「付録B Python Anywhere Webアプリケーションのデプロイ」で
インターネット上になにか載せてみるところまでとする
載せられそうな最小限のアプリができたらやってみる
とか自分で考えることもなく、5章の最後でPython Anywhereへの
デプロイやるなら付録B見ろ、ってなってました
なおクラウドへのデプロイは必須ではなく、やらなくても
6章以降進んでいけるとのこと
気を付けるのは、自前でapp.run()
を呼び出さないこと
PythonAnywhere自身が呼び出すらしい
おなじみのif __name__ == '__main__':
でapp.run()
を囲っておく
Python Anywhereとはなにか
Host, run, and code Python in the cloud: PythonAnywhere
なるほど
まずwebappフォルダを固めたファイルとvsearch-1.0.tar.gzを準備
$ tar -zcvf webapp.tar.gz webapp
webapp/
webapp/static/
webapp/static/hf.css
webapp/templates/
webapp/templates/base.html
webapp/templates/entry.html
webapp/templates/result.html
webapp/vsearch4web.py
サインアップ
“Pricing & signup”から“Create a Beginner account”
A limited account with one web app at your-username.pythonanywhere.com, restricted outbound Internet access from your apps, low CPU/bandwidth, no IPython/Jupyter notebook support.
学習の妨げにはならず、本格的に使おうとするとちょっと足りない、みたいな
いい塩梅の制限な感じ
Tour見ろって言われたから見ておく
すぐ終わる
- Consoles
- Files
- Web apps
- Notebooks
- Jupyter Notebooksだけど無償アカウントでは使えない
- Tabs
- Learn more
- たぶんあとからでもhelp pagesから探せる
- Djangoのチュートリアルとかもあるんだな
Filesタブでファイルをアップロード
Consolesタブでvsearchのインストールとwebappの展開
01:01 ~ $ pip3 install --user vsearch-1.0.tar.gz
Looking in links: /usr/share/pip-wheels
Processing ./vsearch-1.0.tar.gz
Building wheels for collected packages: vsearch
Running setup.py bdist_wheel for vsearch ... done
Stored in directory: /home/kb84tkhr/.cache/pip/wheels/9d/59/91/8186c28b8ee83b0a99b32891b741443ccf6da1fe6edb72799c
Successfully built vsearch
Installing collected packages: vsearch
Successfully installed vsearch-1.0
01:02 ~ $ tar zxvf webapp.tar.gz
webapp/
webapp/static/
webapp/static/hf.css
webapp/templates/
webapp/templates/base.html
webapp/templates/entry.html
webapp/templates/result.html
webapp/vsearch4web.py
mysiteっていう名前にするって書いてあるのでする
そういう規約?
01:02 ~ $ mv webapp mysite
01:02 ~ $ ls
README.txt mysite vsearch-1.0.tar.gz webapp.tar.gz
あ、そういえば仮想環境にしなくてよかったんだろうか
01:03 ~ $ pip3 freeze
-f /usr/share/pip-wheels
alabaster==0.7.11
alembic==1.0.0
:
Django==2.1
:
Flask==1.0.2
:
numpy==1.14.5
:
mysqlclient==1.3.13
pytest==3.7.1
:
:
scipy==1.1.0
selenium==2.53.6
:
:
vsearch==1.0
:
なんだかいろいろ入ってるなあ
どうするか
本でも仮想環境使ってないので使わずに進もうか
そんなにいろいろ入れてるわけじゃないし
Webタブで“Add a new web app”してウィザード形式で設定
ドメイン名は選択の余地なく“kb84tkhr.pythonanywhere.com”
フレームワークは“Python 3.7 (Flask 1.0.2)”を選択
3.7はさっき動かしてみたら3.7.0だったけどまあ大丈夫でしょう
なおデフォルトのバージョンじゃないFlaskを使いたかったら
virtualenv使えってここに書いてありました
仮想環境推奨しないってわけじゃないのね
ところでvenvじゃなくてvirtualenvなんだろうか
“/home/kb84tkhr/mysite/flask_app.py”っていうファイルを作るよって
これがapp.run()
を呼ぶってことかな
“WSGI configuration file:”の右側の“/var/www/kb84tkhr_pythonanywhere_com_wsgi.py”をクリック
こんなファイル(コメントは削除
import sys
project_home = u'/home/kb84tkhr/mysite'
if project_home not in sys.path:
sys.path = [project_home] + sys.path
from flask_app import app as application
flask_app
をvsearch4web
に修正してSave
じゃあさっき作った(らしき)flask_app.pyはどうなるの
Webタブに戻って“Reload kb84tkhr.pythonanywhere.com”をクリック
“kb84tkhr.pythonanywhere.com”へのリンクをクリック
Something went wrong :-(
そう来たか
Webタブで“Error log”を見る
Error running WSGI application
File "/home/kb84tkhr/mysite/vsearch4web.py", line 28
if __name__ == '__main__
^
SyntaxError: EOL while scanning string literal
あれ
直してリロードしてアクセス
出た!
ついでにflask_app.pyの中身をみておこう
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello from Flask!'
ただのひな型だったか
消しても大丈夫そう