kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

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

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_appvsearch4webに修正して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!'

ただのひな型だったか
消しても大丈夫そう