CentOS7にApache+Flaskの環境作り
Flask を使おうということで以前 mod_wsgi をインストールしたので,今回はいよいよ Flask 本体をインストールしていきたいと思います.
流れ
- CentOS7 + Apache の状態でスタート
- Python 実行可能にする
- Apache のモジュール mod_wsgi をインストール
- Python のバージョンを 3 にする (← 今回はここからやりたい)
- pyenv をインストール
- Anaconda3 をインストール
- Flask を導入する
Python 3 系をインストールする
CentOS7 には予め Python がインストールされていますが,手元にある環境のバージョンは 2.7.5 でした.2020 年辺りに完全に Python 3 系に移行する的な話らしいので,ここから始める場合 2 系を使うメリットがほとんどありません.
しかし,現在の環境を下手に汚すのは嫌なので,pyenv で両方のバージョンを切り替えられるようにしてから Flask を入れたいと思います.
pyenv の導入
まず,pyenv をインストールするためには依存パッケージをインストールする必要があります.pyenv を Git で取得したいので一緒にインストールしています.
terminal
# yum install gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel git
その後,Git で pyenv を取得します.
terminal
# git clone https://github.com/yyuu/pyenv.git ~/.pyenv
.bash_profile に環境変数を追加し,設定を反映させます.
terminal
# vim .bash_profile
.bash_profile
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
terminal
# source .bash_profile
Anadonda3 の導入
インストールできる Python のバージョンを検索してみます.
terminal
# pyenv install --list
さっきまでは Python の最新バージョン (3.6.2) をインストールするつもりでしたが,そこに我が友 Anaconda3 の文字を発見してしまい,急遽変更.
terminal
# pyenv install anaconda3-5.0.0
よく考えるとメモリ 1GB, SSD 30 GB の VPS に Anaconda3 入れる意味ないよな...と,コマンド打ってから思いました.
Python バージョンの切り替え
terminal
# python --version
Python 2.7.5
# pyenv versions
pyenv: version '2.7.5' is not installed (set by /home/mktia/.python-version)
system
anaconda3-5.0.0
初っ端からエラー./home/mktia/.python-version を開くと 2.7.5 という記述があったので消してみたら消えました.
terminal
# pyenv versions
* system (set by /home/mktia/.python-version)
anaconda3-5.0.0
# pyenv global anaconda3-5.0.0
# pyenv rehash
# python --version
Python 2.7.5 (!?!?!?!?!?)
pyenv でバージョンを切り替えられないときの対処法
パスが正しく通ってるか調べる
なぜか切り替えがうまくいかず.調べてみると,優先度が違うとかパスが違うとか....とりあえず Python のパスを表示してみると,こんな感じでした.
(追記:パスは下のように .pyenv 下の Python を参照していれば良いので,これで合ってます.)
terminal
# which python
/root/.pyenv/shims/python
さっき書いた .bash_profile の二行目を修正して反映させます.
.bash_profile
export PATH="$PYENV_ROOT/shims:$PATH"
(追記:嘘./root/.pyenv/bin/pyenv のパスが通っていないので,pyenv コマンドが使えなくなります.ちゃんとパスの通し方を学べよ俺)
ところが,これでもうまくいかず,次は global を local に変更してみます.
terminal
# pyenv local anaconda3-5.0.0
# pyenv rehash
# python --version
Python 3.6.2 :: Anaconda, Inc.
# pyenv versions
system
* anaconda3-5.0.0 (set by /home/mktia/.python-version)
切り替え成功!しかし,このファイル内部では Python 3.6.2 を適用する一方,その外では 2.7.5 を適用することになっては意味がないのではないか?
global の Python バージョンを変えるにはどうすれば?
色々ググった結果,上の出力に原因がバッチシ載ってたことがわかりました.set by /home/mktia/.python-version が問題だったんですね.
最初のエラーもこのファイルが原因でしたが,そもそもこのファイルの存在自体が要らないらしいです.理由は,Python のバージョンを読み取るときの優先順位にあるようです.
local で設定 (/home/mktia/.python-version) > global で設定 (/root/.pyenv/version) となってるらしい.....python-version を消したら,set by の参照先が変わりました.そもそも .python-version っていつできたんだ....
terminal
# rm .python-version
rm: remove regular file '.python-version'? y
# pyenv versions
system
* anaconda3-5.0.0 (set by /root/.pyenv/version)
Flask のインストール
pip が使えればコマンドを打つだけです.
terminal
# pip install flask
思った以上に長くなりすぎて Flask を実際に動かすのはまた次回に.