#はじめに
私はある程度の環境構築を以前に済ましていたのでpipで入れましたが、Pythonをインストールするところからメモを残しておきたいと思います。
因みに「PythonのWebフレームワークはTornadoで下記条件のチャットアプリを作って」といただいたので本稿を作成しています。
①ユーザ同士でチャットが出来る部屋がある
②ユーザAとユーザBのチャットルームは他の人からは見れない
③ユーザ同士のチャット履歴はいつでも復元される(サーバ側に保存されている)
④ユーザ登録画面はあってもなくても
⑤チャットはリアルタイムで更新したい
・AWSのEC2とRDSを使ってインフラ構築
・EC2のOSはUbuntuまたはAmazon Linuxを使用
・RDSのDBMSにはMySQLを使用
・サーバ側はPythonで実装
・DBのORMにはsqlalchemyを使用
・マイグレーションにはalembicを使用
・コーディング規約はpycodestyle(pep8)に従う
Webクライアントであればハードル高くありませんが、バックもフロントも理解が深まりそうです!
上記条件のchatを少しずつ作っているのでそのうち投稿できたらいいなと思っています。
#Tornadoとは
Tornadoは、Apache Licence 2.0に基づくオープンソースのノンブロッキングなWebサーバ&Webフレームワークです。TornadoはFriendFeedによって開発され、Facebookに吸収されたのちにオープンソース化されたフレームワークで、以下のような特徴があります。
- ノンブロッキングI/O
- リアルタイム性
- シンプルなテンプレート
- シングルスレッド、シングルプロセス
Djangoがフルスタック型のフレームワークなのに対して、Tornadoは自分で必要なコンポーネントを組み合わせていくフレームワークになります。
日本語情報は少ないのですが、多機能でドキュメントも充実しています。対照的に活用できれば大いに役立つことと思います。
#環境
MacbookPro Sierra 10.12.6
Python 3.6.3
tornado 4.5.2
homebrew
git
homebrewとgitは事前にインストール!
#pyenvをインストール
Pythonの複数バージョンをインストールする場合にpyenvを利用します。
$ brew install pyenv
#環境変数を設定
インストール後は ~/.bash_profile に書き込みます。
export PYENV_ROOT=$HOME/.pyenv
export PATH=$PYENV_ROOT/bin:$PATH
#pythonのインストール
$ pyenv install 3.6.3
$ pyenv install 2.7.13
上記のコマンドを実行するとそれぞれのバージョンのpythonがインストールされます。
pyenv global x.x.x、pyenv local x.x.xまたは、pyenv shell x.x.xでバージョンの切り替えができます。
globalとすると全体に、localにするとそのカレントディレクトリに、shellにすると今使用しているシェルのpythonのバージョンを変更できます。
#pyvenvで環境構築
「python3.6 -m venv」を実行してPythonの仮想環境を作成します。
$ cd ~
$ mkdir .virtualenvs
作成したらvenvを有効化します。
有効化したvenv内でpipで取得したパッケージが取得されます。
$ python3.6 -m venv .virtualenvs/tornado
$ source .virtualenvs/tornado/bin/activate
因みにvenvを無効化する場合は、「deactivate」を実行
$ deactivate
#Tornadoのインストール
pipを用いてインストール!
$ pip install tornado
公式サイトのドキュメントは下記のリンク
[Tornado Web Server — Tornado 4.4.2 documentation](http://www.tornadoweb.org/en/stable/)
ソースコード
公式ホームページに記載されているコードは下記の通りです。
実行すると「Hello, world」がブラウザに表示されます。
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
def make_app():
return tornado.web.Application([
(r"/", MainHandler),
])
if name == "main":
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
上記のソースコードをserver.pyに保存します。
$ cd ~/.virtualenvs/tornado
$ mkdir workspace
$ vi server.py
そして、:wqで保存して抜け出します。
server.pyをpythonで実行
$ python server.py
ターミナルには何も表示されませんが、
ブラウザで[http://localhost:8888](http://localhost:8888)にアクセスすれば下記のように表示されます。
<img width="438" alt="スクリーンショット 2017-10-20 18.09.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/200922/ab00277b-34c3-dc19-d2c6-f241ad63a66a.png">
因みにクライアントからアクセスするときは
$ wget -q -O - http://localhost:8888/
Hello World
になります。
#終わりに
Pythonで何かを表示したいときにGUIを組むほどでもないけどコンソールだけだとさみしい...
そんなときにはTornadoを使ってwebsocketでブラウザにデータを送り、ブラウザに表示すると良いよという記事があったので下記に貼っておきます。
[Tornadoを使ってブラウザをPythonの表示器代わりに使うメモ](https://qiita.com/Dr10_TakeHiro/items/4b6a6e7e3cea6e62252a)
お疲れ様でした!