Python3とFlaskのインストール[環境構築まとめ]

PythonのFlaskを最初から構築する機会があったので、環境構築のメモを残しておく。

pyenvを使ったPythonのインストールなどは以下で行なっていたので、最初にそれをやっていない人は以下をまずは行う。
[Python 環境構築 mac windows
](https://qiita.com/Daara_y/items/d7cf7c859342984b6e1c)


## virtualenvのインストール

上記が終わったら<code>virtualenv</code>をインストール。

>※Virtualenvとは
Virtualenvは、Shell上でプロジェクト毎に個別の環境が構築出来るナイスなツールです。

```bash
pip install virtualenv
```

上記で動かない人は<code>pip3</code>で実行してみてください。自分はエイリアス設定をしているので<code>pip</code>で動きます。

```bashrc
alias pip=pip3
```

## flaskアプリケーションを作成する
適当なワーキングディレクトリに移動してから環境を作る。

コマンドは<code>virtualenv {app_name}</code>

```
cd /Work/flask_app/

$ virtualenv testapp
Using base prefix '/usr/local/Cellar/python/3.7.6_1/Frameworks/Python.framework/Versions/3.7'
New python executable in /Work/flask_app/testapp/bin/python3.7
Also creating executable in /Users/yoshi/Work/sample_python/testapp/bin/python
Installing setuptools, pip, wheel...
done.
```

完了すると以下のように指定した<code>{app_name}</code>でディレクトリ（プロジェクト？）が作成される。

```bash
$ ll
total 0
drwxr-xr-x   6 ys  staff  192  1 16 11:02 testapp/
```

中身はこんな感じ

```bash
$ ll testapp/
total 0
drwxr-xr-x   6 ys  staff  192  1 16 11:02 ./
drwxr-xr-x   4 ys  staff  128  1 16 11:02 ../
lrwxr-xr-x   1 ys  staff   80  1 16 11:02 .Python@ -> /usr/local/Cellar/python/3.7.6_1/Frameworks/Python.framework/Versions/3.7/Python
drwxr-xr-x  18 ys  staff  576  1 16 11:02 bin/
drwxr-xr-x   3 ys  staff   96  1 16 11:02 include/
drwxr-xr-x   3 ys  staff   96  1 16 11:02 lib/
```

この環境を使用するようにアクティブ化する必要があります。OS XとLinuxでは以下のコマンドを実行。

```bash
$ cd testapp
$ . bin/activate

# 上記で動かなかったら
$ source bin/activate

(testapp) adminnoMacBook-Pro-4:testapp ys$
```

うまく起動できると(<code>{app_name}</code>）とターミナル上に出現して実行可能な状態になる。

## Flaskのインストール

```bash
$ pip install Flask

Collecting Flask
  Downloading https://files.pythonhosted.org/packages/9b/93/628509b8d5dc749656a9641f4caf13540e2cdec85276964ff8f43bbb1d3b/Flask-1.1.1-py2.py3-none-any.whl (94kB)
     |████████████████████████████████| 102kB 1.8MB/s
Collecting Werkzeug>=0.15
  Downloading https://files.pythonhosted.org/packages/ce/42/3aeda98f96e85fd26180534d36570e4d18108d62ae36f87694b476b83d6f/Werkzeug-0.16.0-py2.py3-none-any.whl (327kB)
     |████████████████████████████████| 327kB 1.9MB/s
Collecting itsdangerous>=0.24
  Downloading https://files.pythonhosted.org/packages/76/ae/44b03b253d6fade317f32c24d100b3b35c2239807046a4c953c7b89fa49e/itsdangerous-1.1.0-py2.py3-none-any.whl
Collecting click>=5.1
  Downloading https://files.pythonhosted.org/packages/fa/37/45185cb5abbc30d7257104c434fe0b07e5a195a6847506c074527aa599ec/Click-7.0-py2.py3-none-any.whl (81kB)
     |████████████████████████████████| 81kB 2.4MB/s
Collecting Jinja2>=2.10.1
  Downloading https://files.pythonhosted.org/packages/65/e0/eb35e762802015cab1ccee04e8a277b03f1d8e53da3ec3106882ec42558b/Jinja2-2.10.3-py2.py3-none-any.whl (125kB)
     |████████████████████████████████| 133kB 3.4MB/s
Collecting MarkupSafe>=0.23
  Downloading https://files.pythonhosted.org/packages/ce/c6/f000f1af136ef74e4a95e33785921c73595c5390403f102e9b231b065b7a/MarkupSafe-1.1.1-cp37-cp37m-macosx_10_6_intel.whl
Installing collected packages: Werkzeug, itsdangerous, click, MarkupSafe, Jinja2, Flask
Successfully installed Flask-1.1.1 Jinja2-2.10.3 MarkupSafe-1.1.1 Werkzeug-0.16.0 click-7.0 itsdangerous-1.1.0
```

無事に完了したか確認。

```bash
$ flask --version
Python 3.7.6
Flask 1.1.1
Werkzeug 0.16.0
```

### Flask上で動作確認をしてみる
公式ドキュメントからサンプルプログラムを拝借。
[クイックスタート¶
](https://a2c.bitbucket.io/flask/quickstart.html#id2)
サンプルのPythonファイルは<code>{app_name}の直下で大丈夫。

```python:sample_flask.py
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return "Hello Flask"

if __name__ == '__main__':
    app.run()
```

```bash
python sample_flask.py
```

動くかな....




動いた！

```bash
$ python sample_flask.py
 * Serving Flask app "test_flask" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
127.0.0.1 - - [16/Jan/2020 11:33:03] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [16/Jan/2020 11:33:03] "GET /favicon.ico HTTP/1.1" 404 -
```

ちゃんとTOPページへのアクセスが<code>200</code>になっている。ブラウザで確認してみてもちゃんと表示された。

![127_0_0_1_5000_と_test_flask_py_—_未設定__ワークスペース_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253969/015aeb4d-692d-b2e7-2237-9895fbcecdd8.png)


ただ、なぜかコンソールをみると<code>* Environment: production</code>をみている。開発環境なんだからこのまま本番用に使うなよって以下のように警告が出ています。（現状は問題ないけど
`WARNING: This is a development server. Do not use it in a production deployment.`

気になる人は以下のコマンドを実行。

```bash
$ export FLASK_APP=app_name
$ export FLASK_ENV=development

(testapp) ys $ flask run
```

おわり。