めも

技術ブログと言い張るのはおこがましいただのめもです。RaspberryPiで遊んだり、Web系の勉強したりしています。ガジェット好きちゃん。

python3+Flaskのプロジェクト作成手順(WSL+VScode)

Web系は門外漢なので少し勉強しようかなとこちらを読んで手を動かしてみている。
(その1~3まである)
PythonでWebサービスを作る - Python3 + Flaskで作るWebアプリケーション開発入門

Pythonチョットできる&軽量フレームワークということでFlaskにした。
上記の本は流れで説明されているので、もろもろ開発に必要そうな環境構築手順のみをまとめる。
開発の中身は本を参照するとして触れない。

  • Windows10 1903
  • WSL ubuntu 18.04

手順

0. Windows上の準備
1. WSL ubuntu18.04をインストール
2. パッケージインストール
3. DB作成
4. Python の仮想環境作成
5. 仮想環境内で必要なパッケージをpipでインストール
6. Gitの設定

手順詳細

windows上の準備

機能の有効化または無効化でWindows System for Linuxを有効化する。

VScodeをダウンロードして拡張機能を入れる。

  • Japanese Language Pack for VS Code
  • Remote - WSL

WSLのインストール

Winsows10のストアからUbuntu18.04をインストールして起動する。
ユーザ名とパスワードを設定する。
必要なパッケージをインストール。

user$sudo apt-get update
user$sudo apt-get upgrade
user$sudo apt install python3-pip
user$sudo apt install python3-venv

user$sudo apt install postgresql
# pip3 install psycopg2を入れようとすると要求される。
user$sudo apt install postgresql-server-dev10
user$sudo service postgresql start
user$wget -qO- https://cli-assets.heroku.com/install-ubuntu.sh | sh
user$heroku login

postgresqlインストール後サービスのstartする。
HerokuのCLIツールも入れておく。(アカウントを作っておく)

テスト用のDBを作成

user$sudo -u postgres -i
postgres$createuser -d -U postgres -P user_name
#パスワードを入力
postgres$createdb db_name --encoding=UTF-8 --owner=user_name
postgres$psql -U user_name -h localhost -d db_name
db_name=> \l

postgresql関係の操作はpostgresに入って行う。
DBのテーブル作成等はさらにpsqlに入って行う。
\lでDBができているか確認する。
Ctrl+Dで抜けれる。
ここでパスワードを設定している場合、

app.config['SQLALCHEMY_DATABASE_URI'] = "postgresql://localhost/test_db"

app.config['SQLALCHEMY_DATABASE_URI'] = "postgresql://user_name:password@localhost/test_db"

とする。

Python venv作成

user$mkdir test_project
user$python3 -m venv test_project
user$cd test_project
環境in/out
# in
user:~/test_project$ source bin/activate
# out
(test_project) user:~/test_project$ diactivate
pipパッケージのインストール
#環境に入って
(test_project) user:~/test_project$ pip3 list
pip (9.0.1)
pkg-resources (0.0.0)
setuptools (39.0.1)

(test_project) user:~/test_project$ pip3 install flask

# flaskを入れるとJinja2なども入る
(test_project) user:~/test_project$ pip3 list
Click (7.0)
Flask (1.1.1)
itsdangerous (1.1.0)
Jinja2 (2.10.1)
MarkupSafe (1.1.1)
pip (9.0.1)
pkg-resources (0.0.0)
setuptools (39.0.1)
Werkzeug (0.15.4)

# 必要なものは入れる。
(test_project) user:~/test_project$ pip3 install psycopg2 psycopg2-binary
(test_project) user:~/test_project$ pip3 install flask-sqlalchemy
(test_project) user:~/test_project$ pip3 install flask-migrate
(test_project) user:~/test_project$ pip3 install flask-login
(test_project) user:~/test_project$ pip3 install flask_wtf
(test_project) user:~/test_project$ pip3 install rauth
(test_project) user:~/test_project$ pip3 install gunicorn

#
(test_project) user:~/test_project$ pip3 freeze > reqiorement.txt

reqiorement.txtを作ったあと、pkg-resources (0.0.0)の行を削除しないとエラーでる。

Gitの設定

user$ git config --global user.name your_name
user$ git config --global user.email your_email

# wslからVScodeを起動
user:~$ cd test_project
user:~/test_project$ code

拡張機能を入れる。(インストール on WSLになっている。)

Gitの追加とコミット
user:~/test_project$ git init

user:~/test_project$ git add .
user:~/test_project$ git commit -m "first commit"

(.gitignoreの設定を考えなければならない)

flaskの起動

# app.py
from flask import Flask
app = Flask(__name__)

@app.route('/')
def test():
    return 'Hello World!'
user:~/test_project$ export FLASK_APP = app.py
user:~/test_project$ flask run

とするか

# app.py
from flask import Flask
app = Flask(__name__)

@app.route('/')
def test():
    return 'Hello World!'

if __name__=='__main__':
    app.run()
user:~/test_project$ python3 app.py

とする。
http://127.0.0.1:5000/にアクセスするとHello World が表示される。

手順としてのやり方はわかったけど、Herokuにデプロイ周りのお作法とかがよくわからないなぁ…
その辺も調べてまとめよう