- 更新日: 2019年11月19日
- 公開日: 2019年11月13日
【無料サーバーのご紹介】Pythonanywhere
なにかと "Web" には興味あるものの、サーバー代やドメイン代、慣れない操作感等でモヤモヤされている方も多いのではないでしょうか?
今回は "常時接続" "広告無し" でサーバーを無料利用できる 「Pythonanywhere」 についてご紹介。
機械学習のプログラムを実行したことあるけど、そこから前に進んでいない方、チョット前進できるかもしれませんよ。
【無料サーバーのご紹介】Pythonanywhere
Pythonanywhereを使ってWebアプリを公開する様子
今すぐコードを確認する
★flask_app.py★
from flask import Flask, render_template, request
import backend
app = Flask(__name__)
@app.route("/", methods = ["GET", "POST"])
def home():
if request.method == "GET":
return render_template("index.html")
if request.method == "POST":
day = request.form.get('textbox')
day = int(day)
return render_template("index.html",
output = backend.days_feet(day),
user_text = day)
if __name__ == "__main__":
app.run()
★backend.py★
import pickle
from sklearn.preprocessing import PolynomialFeatures
import os
THIS_FOLDER = os.path.dirname(os.path.abspath(__file__))
saved_model = os.path.join(THIS_FOLDER, 'model3.pkl')
def days_feet(day):
#model = pickle.load(open('model3.pkl','rb'))
model = pickle.load(open(saved_model,'rb'))
poly_reg = PolynomialFeatures(degree = 6)
test_data = poly_reg.fit_transform([[day]])
output = model.predict(test_data)
return int(output)
★index.html★
<html>
<title> 朝顔の成長予測App </title>
<form method="POST">
<label> 何日目の 朝顔 の長さが気になる? </label>
<input type="text" name="textbox" value = {{user_text | safe}}> <br>
<label> 予測値: </label>
<label> {{output | safe}} cm</label> <br>
<button type="submit" name="submit">予測</button>
</form>
</html>
Pythonanywhereの特徴とメリット
クラウド上で Python プログラムを実行できる環境はたくさんあります。
- Google Colaboratry
- Kaggle
- AWS
- Google Cloud Platform
- Repl etc
しかしどのクラウド環境もプログラムの実行は一時的。 いつアクセスしてもプログラムからレスポンスをもらえるのは、きちんと VPSサーバーや 有料の AWS を利用した場合のみ、と思われている方も少なくないと思います。
Pythonanywhere は、 VPS や 有料版AWS のように いつ アクセスしてもプログラムからレスポンスをもらうことができます、無料で。しかも煩わしい広告はなし、逆に自分が公開する Webサイト に広告を貼ることができるでしょう。
そして Webサイト の公開にかかる時間は、最短 1分。しかも SSL(https://)については "ワンクリック" で OK。 レンタルサーバーや VPS、 AWS などいくつかのプラットフォームを体験したことのある大島ですが、この Pythonanywhere の操作性、興奮しました。
従来 Python を利用した Webアプリのプラットフォーム作成は手間がかかるものでしたが、こちらを利用すれば本当に早く、正確に自分だけの Webサイト を公開することができます。
Pythonanywhereのメリット
- 無料で始められる
- 管理画面等に広告表示無し
- 利用できるフレームワーク Django、 Flask、 Bottle、 web2py etc
- データベース MySQL も無料利用可(Postgre有料)
- SSL(https://)はワンクリックで無料
- サーバー上のファイル操作も分かりやすい
- 保存可能データサイズは約 12GB
- コマンド操作無しでサーバー等設定できる
- タブレットでも操作可能
- 利用ユーザー数: 約 1,400万
Pythonanywhereのデメリット
- AWS や VPSサーバーに比べると制約がある
- REST API などは開発・利用しにくい(できない)
- .pkl など一部ファイル種は特有の読み込みプログラムが必要
- pip intsall には --user オプションが必要
- 無料版はサブドメインのみ
Pythonanywhere は AWS EC2 を利用して、各ユーザーのプログラムを実行。仮に有料版($5/月〜)に切り替える際も、アップグレード手続きを行うのみで OK なのでスケールアップが簡単ですね。
PythonanywhereでFlaskを起動してみる
自分のパソコンで Python フレームワークの Flask を起動させようと思うと、 ん〜 ってなると思いますが、 Pythonanywhere を使うと何も考えなくても Flask サイトを起動できます。
感覚的には ログイン → Web管理画面 → Flask起動ボタン → OK といった感じ。
ちなみに上図黄色ボタンにもあるように、無料利用の場合は 3ヶ月に一回はログインして黄色ボタンを押す必要が。プログラムが放置されていないことをお知らせする必要があるみたいですね。
今回の AI Web App は、朝顔の成長を予測するプログラム。
多項式回帰を使ったモデルで、 ○日後の朝顔の長さを教えてくれます。
モデルの作成プロセス(機械学習)は、 https://github.com/oshimamasara/ML_PolynomialFeatures- から
Pythonanywhereでは、使用する Python のバージョン毎に若干ライブラリ(pip)の内容が違います。 Python3.6 では、今回の sklearn 読み込みエラーはでません。 Python3.7 特有の現象です。
今回は簡単な AI アプリでしたが、こんな感じで 「計算」 や 「チャット系」 などいろんなアプリを無料で作成することができるでしょう。 また広告やアフィリエイト等設定すると、無料で収益可能なサイトを運営することができますね。
プログラムの内容について
従来の Pythonアプリのプログラムと Pythonanywhere で作成したプログラムの違い
AI系の Web アプリというと、 事前に API を起動しておいて、そこに入力値を POST して、変換値を JSON で返してもらう、という流れが一般的。しかし、今回の場合は、入力値を Python プログラムにポストして換算値を "数値型" で受け取り。
今回は軽量でシンプルな AI なので特に気になりませんが、画像系の AI アプリになると送受信データ量が大きくなるため上手くいかないかもしれません。
Pythonanywhere、ここまでご紹介したように使いやすくて便利なのですが、ポート(port)やマシン系(sudo)の設定はユーザーレベルでは変更できません。 80番のポートも sudo 権限が必要で、コマンドで sudo すると BAN されます。
そのため今回はポートを使わない処理内容としました。
また backend.py で、 model ファイルの "model3.pkl" を読み込んでいますが、普通の読み込み方とチョット違います。
■今回のの場合■
THIS_FOLDER = os.path.dirname(os.path.abspath(__file__))
saved_model = os.path.join(THIS_FOLDER, 'model3.pkl')
model = pickle.load(open(saved_model,'rb'))
●普通の読み込み方●
model = pickle.load(open('model.pkl','rb'))
Pythonanywhereヘルプページより(参考ページ)
Pythonanywhereを使わないいつものケースなら一行で終わっている 〇〇.pkl の読み込み処理、 Pythonanywhere のアプリ上では処理に 三行もかかっています。 これは Pythonanywhere 特有のマシン設定の関係で、 os を呼び出さないと .pkl は読み込んでくれません。
今回はこの .pkl の読み込み処理に苦戦したましたが、恐らくこの他にも Pythonanywhere 特有のやり方があると思います。
まとめ
従来 Python 製アプリケーションを開発・リリースしようと思うと、
- 開発環境の構築
- アプリケーションの開発
- サーバーのセッティング
- デプロイ
- SSL(https)の設定
という工程が必要でした。 Pythonanywhere を使うと少し特有のやり方は必要ですが、
- Pythonanywhereのアカウント作成
- アプリ開発
で Python製アプリケーションを公開できます。すごい時短になりますね。
またこのような Pythonanywhere 以外にも "Docker" という技術を使うと、開発したプログラムだけでなく、アプリの実行環境もサーバーに移すことが可能。
つまり 3、 4年前は当たり前だったことが、当たり前でなくなってきています。プログラミング学習についてはどうでしょうか? 何か独自の改善をされていますでしょうか?
「Python、魅力的なんだろうけど本を開くと眠くなる...」「プログラミング、興味はあるけど一歩前に進めない...」 と理想通りの未来を全然実現できないでモヤモヤされている方、どうでしょうか、 CodeCamp は。 CodeCamp 自体は、オンライン型マンツーマンのプログラミングスクールですが、 「無料体験枠」 が用意されています。
東証一部上場企業のグループに属する CodeCamp ならではの安心感と "フィット感"、 無料体験で堪能頂けると思います。私も試したことありますが、なかなか面白いですよ。
昨今の "プログラミング" ニーズで、無料体験も "満席" がちなので気になる方は 公式ページ よりお早めにチェックしてみてください。
- この記事を書いた人
- オシママサラ