Scnsh Blog

技術的なことを書きたい場所

Flask tutorial + pipenv + heroku

いろいろと注意点があったのでメモしておく

mkdir flask-tutorial
cd flask-tutorial
mkdir flaskr
touch __init__.py 
# http://flask.pocoo.org/docs/1.0/tutorial/factory/ の内容を記述
touch Procfile 
# Procfile の中身は web: gunicorn flaskr:'create_app()'

## pipenv設定
pipenv --three
pipenv install Flask
pipenv install gunicorn

## git設定
git init # http://flask.pocoo.org/docs/1.0/tutorial/layout/ から .gitignoreをコピー
git add *
git commit -m "initial commit"

## heroku設定
heroku create
heroku config:set FLASK_APP=flaskr
git push heroku master
heroku ps:scale web=1
heroku open # http://XXX/hello に移動して、"Hello, World!" が表示されていることを確認

参考文献

それぞれを参考にして組み合わせた。

flask.pocoo.org 今回の環境で動かしたかったチュートリアルサンプル。ローカルで動かす手順しかない。

github.com herokuのチュートリアルで使われるコード。Djangoでpipenvは使われてない

github.com herokuのチュートリアルでFlask+pipenvを使っているが、create_app()を使ってない

github.com herokuのサンプルでFlaskを使っていて、create_app()を使っているが、pipenvを使ってない

PythonProject 立ち上げ備忘録

久々に作ったら色々とやることあったので、メモしておく

環境

  • Ubuntu 18.04 (あまり関係なさそう)
  • python 3.7.6 (あまり関係なさそう)
  • vscode + pyenv + pipenv vscode, pyenv, pipenv のインストール方法は省略

python のバージョン更新

pyenv を使って python の バージョン管理をしているので更新する

$ pyenv update
$ pyenv install --list | grep 3.7.6
  3.7.6

pyenv update を使うには設定が必要かも

pyenv自身のバージョンを上げる - Qiita

pipenv設定

ディレクトリを作ってVScodeを開く

$ mkdir newProject
$ code newProject

VScode上でターミナルを開く

pipenv --python 3.7.6
pienv install xxx xxx 

静的型チェック、lint、formatterの設定を追加

pipenv install black mypy flake8

VScodeの再起動を行えばpipenvの環境を自動的に適応させてくれるようになる f:id:scnsh:20200203082143p:plain

ターミナルもpipenv環境を設定してから開くようになる 新しくターミナルを作った時だけだった

おまけ

gitignoreを作る時に参考になる

gitignoreを書く時に便利なテンプレート集 | cupOF Interests

python + vscode だと以下の2つを参考にするのが良さそう

追記

blackをpipenvで使うには、pipfileに

[pipenv]
allow_prereleases = tru

が要りそう

ABC142

AtCoder Beginner Contest 142 に参加。

f:id:scnsh:20190929003110p:plain

問題 解答 結果
A AC
B AC
C AC
D AC
E - -
F - -

A - Odds of Oddness

4分ぐらいで解けた。

場合分けに漏れがないか気になりつつAC

B - Roller Coaster

5分ぐらいで解けた。

普通にSortして間に合うか一瞬迷う。

C - Go to School

10分ぐらいで解いた。

添字ミスしそうだったけど、それほど手間取らず。

D - Disjoint Set of Common Divisors

20分ぐらいかかって、一回お手つき

約数のリストを最初求めればいいと考えたけど、途中で素因数分解した結果を使う方が良いことに気づく。

素因数分解の実装を拾ってきて(これでええんか?)、共通の素因数を求めて、表示。

AとBが共に1の場合は単純に、1を足すと2になってしまうケースに気づかず。一度WA。もったいない。

E - Get Everything

最後まで解けずに迷走してしまった。

すぐに動的計画法で解けそうだと気づいたが、2**Nで表して解くという考え方に気づけず。

途中でBFSやDFSで見つけられないか模索などしてタイムオーバー。

解法を見たら納得でした。

F - Pure

途中で問題を読んだが、グラフ系の問題の解き方が分からずにそうそうに諦めモード。

もっと修練を積んでから挑戦したい。

総括

Dまで解けて、前回よりは満足度高い。

最近動的計画法を勉強していたので、Eが解けなかったのが残念。

そろそろF問題にもチャレンジできるようになりたいところ

ABC141

AtCoder Begineer Contest 141 に参加。

f:id:scnsh:20190923190521p:plain

問題 解答 結果
A AC
B AC
C AC
D TLE
E TLE
F - -

3完、3ペナ

A - Weather Prediction

3分ぐらいで解けた。

先頭の文字だけで区別すればOK

B - Tap Dance

7分ぐらい。

RとLの違いだけを気にすれば良い。

C - Attack Survival

10分ぐらい。

Nが10の5乗なので、単純にループでまわしても解ける。

一応Pypyで実行してAC。

D - Powerful Discount Tickets

この問題で残り時間をほとんど溶かした。

方針と実装はそれぞれできたが、NとMがそれぞれ10の5乗なので、O(NM)の計算量になると制限時間オーバーになる。

回避方法が分からなかったが、優先度付きQueueを使えばO(M log N) となり解けた。

Pythonだとheapq

Submission #7547729 - AtCoder Beginner Contest 141

最小を最大に入れ替えるために-をつけるのはよくやる方法。

E -Who Says a Pun?

解き方が分からず、力任せにやったら案の定TLE

Z-Algorithm なるものを使うらしい。

知ってないと解けない問題ぽかったなぁ。

Submission #7548216 - AtCoder Beginner Contest 141

F - Xor Sum 3

到達できず

総括

D問題で計算量を減らす方法を探しているうちにタイムオーバー E問題もアルゴリズムを知っていれば解けた問題 やはり基本問題もっと沢山解く必要があることがわかった回だった。

AGC38

AtCoder Grand Contest 38 に参加。

  • どれも解けなかったので、ratingつかず。
  • 集中できなかったので、A問題解けない時点で諦めてた

A - 01 Matrix

atcoder.jp

どういう形になれば条件を満たすパターンかわからず、終了。

解説を見てなるほどと思った。

部分行列を単純に作るだけで、ACなった。

Submission #7667154 - AtCoder Grand Contest 038

Noになるケースが実はないってそんなのあるんかいとは思ったけど。

B - Sorting a Segment

atcoder.jp

解けず。

C - LCMs

atcoder.jp

解けず。

D - Unique Path

atcoder.jp

解けず。

E - Gachapon

atcoder.jp

解けず。

F - Two Permutations

atcoder.jp

解けず。

総括

過去何度かA問題を解いたことがあったので、今回もいけるかと思ったけどそんなことなかった。

まだまだABCで頑張る。