2020-01-25に更新

あびょびょべ☆(^~^)

2020-01-25(Sat) 19:15 - 22:50

20200125blog3a1.jpg

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑5400円のメタルラックを買ったぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 この写真の見どころは 銀色の鉄の棒なの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 そうだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 おっ、なんか 体が軽くなったぜ☆
左右にスペースができて エアコンの熱風も直撃しないしな☆」

20200125blog4.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑じゃあ パティで 右の黒いのにログインしようぜ☆」

cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 CentOS だっけ……☆」

[root@localhost /]# ps aux | grep python
root       727  0.0  0.7 358188 29256 ?        Ssl   1月12   0:04 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
root      1068  0.0  0.4 573824 17176 ?        Ssl   1月12   1:36 /usr/bin/python -Es /usr/sbin/tuned -l -P
root      7251  0.0  0.0 112724   980 pts/0    S+   17:59   0:00 grep --color=auto python

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Python3 は入ってなさげだな☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 会社の仕事は 持ち帰らないんじゃなかったのかだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 予習だぜ☆」

CentOS 環境のPython

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 CentOS7 と Ubuntu はだいぶ違う感じだなあ☆」

cd /usr/local
mkdir www
cd www
pwd
/usr/local/www

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 とりあえず ディレクトリーを作っておくかだぜ☆」

sudo yum groupinstall "development tools"

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 なんか知らんが コマンドを叩けばいいのかだぜ☆?」

--> 衝突を処理しています: git2u-perl-Git-2.16.5-1.ius.centos7.noarch は perl-Git < 2.16.5 と衝突しています
エラー: git2u-perl-Git conflicts with perl-Git-1.8.3.1-21.el7_7.noarch
 問題を回避するために --skip-broken を用いることができます。
 これらを試行できます: rpm -Va --nofiles --nodigest

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑なんで perl と衝突するんだぜ……☆?」

rpm -Va --nofiles --nodigest

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑このコマンドも意味分からんし……☆」

sudo yum install bzip2-devel gdbm-devel libffi-devel \
  libuuid-devel ncurses-devel openssl-devel readline-devel \
  sqlite-devel tk-devel wget xz-devel zlib-devel

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑無視して次のコマンドを打と☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 無視していいのかだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ファイルをダウンロードしろと記事に書いてあるが、CUI環境で どうやるんだぜ……☆?」

CentOS7にPython3.7をインストールする

curl -O https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz
ls
Python-3.7.3.tgz

tar xf Python-3.7.3.tgz
ls
Python-3.7.3  Python-3.7.3.tgz

cd Python-3.7.3
./configure
# なんかチェックが始まる。

make
# なんかコンパイルが始まる。長い……☆

sudo make altinstall
# なんかインストールしてる……☆
python -V
Python 2.7.5

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 なんだこの クソ記事は……☆ Python2 が入ってるじゃないか☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 アンインストールしようぜ☆?」

 yum remove python
 ```

python -V
Python 2.7.5


![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif) 「 消えんなあ☆」 [Python 3 を CentOS 7 に yum でインストールする手順](https://weblabo.oscasierra.net/python3-centos7-yum-install/)

yum install -y https://centos7.iuscommunity.org/ius-release.rpm
yum search python3


![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif) 「 python34 とか、 python36 とかが見つかるぜ☆」

python3.7 -V
Python 3.7.3


![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif) 「 あっ、 python3.7.3 が入ってたぜ☆」 [CentOS7にFlask+nginx+uwsgiの環境構築をする](https://qiita.com/kyo_developer/items/850ac3feaa43e6c140a5) ![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif) 「 `pyenv` って何だぜ☆? `virtualenv` じゃないの☆?」 [Flask](https://palletsprojects.com/p/flask/) [User’s Guide](https://flask.palletsprojects.com/en/1.1.x/) ![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif) 「 公式ページ読も……☆」

pip3 install virtualenv
-bash: pip3: コマンドが見つかりません

pip3.7 -V
pip 19.0.3 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)


![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif) 「 コマンドの名前に バージョン番号付けるのは イケてなくないかだぜ☆?」

pip3.7 install virtualenv
You should consider upgrading via the 'pip install --upgrade pip' command.

pip install --upgrade pip
-bash: pip: コマンドが見つかりません

pip3.7 install --upgrade pip3.7
Could not find a version that satisfies the requirement pip3.7 (from versions: )
No matching distribution found for pip3.7

pip3.7 install --upgrade pip


pip3.7 install Flask


![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif) 「 今どき Flask なんか使われてんのかな☆」

アップグレードするぜ☆(^~^)

pip3.7 install -U https://github.com/pallets/flask/archive/master.tar.gz


Virtualenv をインストールしようぜ☆(^~^)

sudo yum install python-virtualenv


[Quickstart](https://flask.palletsprojects.com/en/1.1.x/quickstart/) ![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif) 「 もう使えるようになってんのかな……☆?」

cd /usr/local/www
mkdir myproject
cd myproject

Virtualenvのディレクトリーを作るぜ☆(^~^)

python3.7 -m venv venv
ls
venv

作ったディレクトリーを有効にするぜ☆(^~^)

. venv/bin/activate


![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif) 「 手順を間違えていたかだぜ☆(^~^) やり直し☆」

Flaskをインストールするぜ☆(^~^)

pip3.7 install Flask

なんか知らんけど古いバージョンの Pip をアップグレードするぜ☆(^~^)

pip3.7 install --upgrade pip3.7

アップグレードするぜ☆(^~^)

pip3.7 install -U https://github.com/pallets/flask/archive/master.tar.gz

Virtualenv をインストールするぜ☆(^~^)

sudo yum install python-virtualenv


[Quickstart](https://flask.palletsprojects.com/en/1.1.x/quickstart/) ![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif) 「 また読み直すぜ☆」

cd /usr/local/www/myproject
vim hello.py


![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif) 「 ファイル転送がめんどくさいので vim でコーディングするぜ☆」

from flask import Flask
app = Flask(name)

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


![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif) 「 `i` で挿入モードにして右クリックで貼り付け、`[Esc]:wq[Enter]`」

export FLASK_APP=hello.py
flask run


![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif) 「 なんかサーバーが動いているのかもしれないが☆ バックグラウンドで動かさないと コマンド打てなくないかだぜ☆?」

[Ctrl] + [C]

flask run&
curl http://127.0.0.1:5000/


Output:

127.0.0.1 - - [25/Jan/2020 19:28:56] "GET / HTTP/1.1" 200 -
Hello, World!(venv) [root@localhost myproject]#


![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif) 「 動いているみたいだな☆」

[Ctrl] + [C]

python3.7 -m flask run&


Output:

OSError: [Errno 98] Address already in use


![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif) 「 つら……☆」

jobs
[1]+ 実行中 flask run &

kill %1
jobs
[1]+ Terminated flask run


python3.7 -m flask run&
curl http://127.0.0.1:5000/
127.0.0.1 - - [25/Jan/2020 19:38:59] "GET / HTTP/1.1" 200 -
Hello, World!


![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif) 「 Python コマンドでも動くようだ……☆」 ![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif) 「 外部のマシンから見えないけど☆」

flask run --host=0.0.0.0


![OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif](https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5e2c15dcb1dd3.gif) 「 IPアドレスを指定して実行する必要があるんじゃないの?」

ip a


![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif) 「 ふむ……☆」

flask run --host=192.168.10.13&


![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif) 「 ブラウザでアクセスしてみてくれだぜ☆」 `http://192.168.10.13:5000/` ![KIFUWARABE_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5e2c161ac6324.gif) 「 ダメだぜ☆」 ![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif) 「 ポートが開いてないのかなあ☆?」 [【すぐわかる】CentOSのポート開放のやり方](https://eng-entrance.com/linux-centos-port)

firewall-cmd --list-all


Output:

public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: ssh dhcpv6-client http
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:


![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif) 「 ポートは何も開いてなさげ☆」

firewall-cmd --zone=public --add-port=5000/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-all


Output:

public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: ssh dhcpv6-client http
ports: 5000/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:


![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif) 「 5000番を開けたらいいんじゃないかだぜ☆?」 ![20200125blog5.png](https://crieit.now.sh/upload_images/522c254c00bbf29f8ce335c66c34450a5e2c3548134b3.png) `http://192.168.10.13:5000/` ![KIFUWARABE_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5e2c161ac6324.gif) 「 おっ、ブラウザでアクセスできたぜ☆」 ![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif) 「 じゃあ プライベート・ネットワーク内で見えてるな☆ 十分だぜ☆」 [muzudho/python3-flask-web-server](https://github.com/muzudho/python3-flask-web-server) ![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif) 「 ↑ さっそく Git hub に置いておこう☆」

@app.route('/')
def index():
return 'Index Page'

@app.route('/hello')
def hello():
return 'Hello, World'


![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif) 「 URLと ページの内容は 一対一で見やすそうだな☆」 ![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif) 「 サーバーをリロードするには どうすればいいんだぜ☆?」 [Flaskでソースの変更を検知して、Webアプリを自動リロードする[Python Tips]](https://www.sukerou.com/2018/11/flaskwebpython-tips.html) ![KIFUWARABE_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5e2c161ac6324.gif) 「 デバッグ・モードでいいんじゃないか☆?」

flask run --reload


![OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif](https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5e2c15dcb1dd3.gif) 「 リロードのコマンドライン引数を付けたらどうなの?」 Output:

OSError: [Errno 98] Address already in use
[3]+ 終了 1 flask run --host=192.168.10.13


![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif) 「 エラー吐いて止まったぜ☆」

jobs
[1]- 実行中 python3.7 -m flask run &
[2]+ 実行中 flask run --host=192.168.10.13 &

kill %2
kill %1

python3.7 -m flask run --reload&

jobs
[2]+ 停止 python3.7 -m flask run --reload


![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif) 「 うまくいかんなあ☆」

flask run --host=192.168.10.13 --reload&


![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif) 「 うまくいかんなあ☆」

flask run --host=192.168.10.13&


![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif) 「 これなら うまくいく☆」 ![KIFUWARABE_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5e2c161ac6324.gif) 「 ジョブを キル するの、イケてないだろ☆ サーバーの ストップと 設定のリロードのコマンドは無いのかだぜ☆?」

flask run --host=192.168.10.13 --debugger --reload&


![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif) 「 デバッグ・モードなら リロードが効くみたいだぜ☆」 ![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif) 「 ブラウザでアクセスしてみてくれだぜ☆」 `http://192.168.10.13:5000/hello` ![KIFUWARABE_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5e2c161ac6324.gif) 「 ダメぽっぽ☆」 ![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif) 「 エラーを吐いてくれないのかだぜ☆?」 ![OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif](https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5e2c15dcb1dd3.gif) 「 バックグラウンドで動かしていたら 視えないんじゃないの? 末尾の `&` を外しなさいよ」 ![20200125blog6.png](https://crieit.now.sh/upload_images/2ac69eaceb65f74c4f0751b81991e5df5e2c454f43d6d.png) ![KIFUWARABE_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5e2c161ac6324.gif) 「 見えたぜ☆」 ![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e2c14ef4cfd4.gif) 「 不安な動きだな……☆」

@app.route('/user/')
def show_user_profile(username):
# show the user profile for that user
return 'User %s' % escape(username)
```

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑こんな風に書けば 変わる文字列も受け取れるみたいだな☆ 他のパターンもドキュメントに載ってるぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 今日は ここまでだぜ☆」

<書きかけ>

何度でもクリック!→

むずでょ

光速のアカウント凍結されちゃったんで……。ゲームプログラムを独習中なんだぜ☆電王戦IIに出た棋士もコンピューターもみんな好きだぜ☆▲(パソコン将棋)WCSC29一次予選36位、SDT5予選42位▲(パソコン囲碁)AI竜星戦予選16位

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

むずでょ の最近の記事