CentOSでPythonの開発環境を構築するメモ書きです。
WEBのフレームワークから機械学習のライブラリまで何でも揃ってるPythonですが、CentOSでPythonを使おうとすると2系と古いのでPyenvを使ってPython3を簡単に使えるようにします。
目次
スポンサーリンク
Python3を導入する環境
下記条件の開発環境をCentOS上に構築します。
- CentOS 6 または 7
- Python3はPyenvでインストール
- Pyenvの環境はユーザー全体で共有できるようにしておく
- OS 標準のPython2系はそのまま残す(yumコマンド等に影響するため)
CentOSはyumコマンドがPython2を使っているため、普通にPython3を上書きインストールしてしまうと他に影響が出てしまいます。
そこで Pyenv の出番ですが、これを使うと標準のPython2は残してPython3を共存させる事が出来るようになります。
Pyenvはバージョンを指定して複数のPythonをインストールする事が出来るので、古いアプリを旧バージョンのPythonで動かしつつ、最新のPythonで新しいアプリを同時に動かしたりも出来て非常に便利です。
CentOSにPyenvをインストールする
CentOSにPyenvを導入する手順を書いていきます。CentOSは6系も7系も同じ手順でいけます。
■ 依存パッケージのインストール
# yum -y install gcc bzip2 bzip2-devel openssl openssl-devel readline readline-devel sqlite-devel tk-devel git
■ Pyenvのインストール
Pyenvは全ユーザーで共有したいので “/usr/local/pyenv” にインストールします。
Pyenvはホームディレクトリにもインストールできるので、インストール権限を持っていない場合は “~/.pyenv” に置き換えてください。
# git clone git://github.com/yyuu/pyenv.git /usr/local/pyenv # cd /usr/local/pyenv # mkdir {versions,shims}
■ Pyenvのプラグインをインストール
Pyenvのプラグイン pyenv-virtualenv と pyenv-update も同時にインストールします。
pyenv-virtualenvはパッケージの仮想環境を構築するプラグインで、pyenv-updateはPyenv自体をアップデートするプラグインです。
# cd plugins/ # git clone git://github.com/yyuu/pyenv-virtualenv.git # git clone git://github.com/yyuu/pyenv-update.git
■ Pyenvの PATH, PYENV_ROOT を設定
# echo 'export PYENV_ROOT="/usr/local/pyenv"' >> /etc/profile.d/pyenv.sh # echo 'export PATH="${PYENV_ROOT}/shims:${PYENV_ROOT}/bin:${PATH}"' >> /etc/profile.d/pyenv.sh
■ sudo 時も PATH, PYENV_ROOT を引き継げるよう設定
# visudo ----- 編集 ----- #Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin <- コメントアウト # 以下を追加 Defaults env_keep += "PATH" Defaults env_keep += "PYENV_ROOT"
■ Pyenvの動作確認
設定した環境変数を読み込むには一旦ログアウトして再ログインするか、sourceコマンドで再読み込みをする。
$ source /etc/profile.d/pyenv.sh $ pyenv --version pyenv 1.2.8-34-g7d02b246
これでPyenvのインストールと初期設定は完了です。
PyenvでPython3をインストールする
“pyenv install -l” と打つとインストールできるバージョンの一覧が表示されます。
$ pyenv install -l ~ 省略 ~ 3.6.8 3.7.0 3.7-dev 3.7.1 3.7.2 3.8-dev ~ 省略 ~
利用するバージョンを指定してこのようにインストールします。
$ sudo pyenv install -v 3.7.2
これだけで簡単にPythonのインストールができます。
■ 新しいバージョンが見つからない時はPyenvをアップデートする
久しぶりにPyenvを使って新しいバージョンが出てこない場合はPyenv自体をアップデートしてあげます。アップデートは先程インストールした pyenv-update プラグインがやってくれます。
$ sudo pyenv update
PyenvでPythonのバージョンを切り替える
Pyenvはシステム全体、ディレクトリ単位でバージョン指定が可能なのでやってみます。
■ ディレクトリ
$ python --version Python 2.7.5 $ mkdir ~/my_python/ $ cd ~/my_python/ $ sudo pyenv local 3.7.2 $ python --version Python 3.7.2
ディレクトリ単位の場合はそこに .python-version という設定ファイルが出来るのでそこで管理されるようです。
他のユーザーでもそのディレクトリでは指定されたPythonを使い、ディレクトリを抜ければ標準のPythonを使うように勝手に切り替わります。
開発ディレクトリに一回Pyenvしておけばあとはバージョンを意識しなくても良いので便利です。
■ 全体
$ sudo pyenv global 3.7.2 $ python --version Python 3.7.2 ## 他のユーザーへも反映されます $ su - # python --version python --version Python 3.7.2 ## 戻します # pyenv global system # python --version Python 2.7.5
こんな感じで簡単に切り替え可能です。
pyenv-virtualenvでパッケージ管理
PyenvはPythonのバージョン管理ツールですが、プラグインのpyenv-virtualenvを使うとその中でパッケージ管理もできるようになります。
Python3.7.2を使って別々のサービスを開発したい場合等はpyenv-virtualenvを使うと便利です。
■ Pyenvでvirtualenv環境を作成する
$ pyenv versions * system (set by /usr/local/pyenv/version) 3.6.8 3.7.2 ## virtualenvの作成 $ sudo pyenv virtualenv 3.7.2 myapp-3.7.2 $ pyenv versions * system (set by /usr/local/pyenv/version) 3.6.8 3.7.2 3.7.2/envs/myapp-3.7.2 venv-3.7.2 ## 作ったvirtualenvを使う $ pyenv local myapp-3.7.2 ## このようにパッケージを分けて使える # pip list Package Version ---------- ------- pip 18.1 setuptools 40.6.2
Pyenvも仮想環境だし、virtualenvも (パッケージの) 仮想環境なので最初は混同してパッケージをごちゃごちゃインストールして使ってました😇
アプリを引っ越しさせる時に面倒になるので「1アプリ = 1 virtualenv」がいいかも知れない。
PyenvでPythonをアンインストールする
不要なPythonはバージョンを指定してアンインストールもできます。
■ Pyenvで利用できるバージョン一覧
$ pyenv versions * system (set by /usr/local/pyenv/version) 3.4.9 3.6.8 3.7.2
■ バージョンを指定してアンインストール
# sudo pyenv uninstall 3.4.9 pyenv: remove /usr/local/pyenv/versions/3.4.9? y <- yで応答 # pyenv versions * system (set by /usr/local/pyenv/version) 3.6.8 3.7.2
pipコマンドの調整
Python には pip と呼ばれる yum のようなパッケージ管理システムがありますが、この状態で pip list を実行すると下記メッセージが出力されるのでこれを止めます。
$ pip list DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
pip.conf が無いと言われているのでこれを作って、pip list での出力フォーマットを設定してあげます。
$ mkdir -p ~/.config/pip/ $ vi ~/.config/pip/pip.conf ----- 追加 ----- [list] format = columns ----- ここまで ----- $ pip list Package Version ----------------- ----------- beautifulsoup4 4.6.0 bs4 0.0.1 certifi 2017.7.27.1
これで環境構築は終了です。少々慣れが必要ですがPyenvを使えば開発環境を作るのが相当楽になります。
PyenvとAnacondaの共存には注意
Pythonで機械学習をしたい場合に情報収集をしていると Anaconda という別の仮想環境を構築するアプリケーションがよく目に付きます。
こっちは機械学習とかのパッケージをオールインワンで構築してくれる代物で、また別の方法でパッケージ管理をします。
このAnaconda管理下でpipを使うとAnacondaがおかしくなってしまうので注意しましょう。(よくわからずに色々やってたらAnacondaを壊してしまった…)
Pyenvを使うならpipでパッケージを管理。Anacondaならcondaでだけ管理した方がいいみたい。
そもそも、CentOSにPyenvを入れてPythonの環境を作れる人ならpipだけで困らずに開発環境も構築できると思う。
AnacondaはWindowsでPythonの環境構築をしたい場合とか、OS周りの事はよくわからんというケース向けかな?
TensorFlowがPython 3.7.2で動かなくてPython 3.6系だったら動いたとかハマる時もあるけど、下手に併用するとうっかりやらかしそうなのでPyenvを使うならpipだけでやった方がわかりやすいです。
以上、CentOSにPyenvをインストールするメモでした。
とても参考になりました!
一点タイポ?っぽいものが。
■ Pyenv のインストール
# git clone git://github.com/yyuu/pyenv.git ./pyenv
↓
# git clone https://github.com/yyuu/pyenv.git ./pyenv
では?
コメントありがとうございます。これどっちでもいけますよ。
gitコマンドが git:// プロトコルをいいように解釈してくれるんだと思います。
言われて気付きましたがあんまりプロトコル部分を意識してなかったです。
Git リポジトリの取得