work.log

元エンジニアの備忘録的ブログ

CentOSにPyenvをインストールしてPython3の開発環境を構築する

投稿:2017-10-10 13:56  更新:

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系も同じ手順でいけます。

プロンプトは「# = root」、「$ = 一般ユーザ」で表記していきます。

■ 依存パッケージのインストール

# 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-virtualenvpyenv-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でだけ管理した方がいいみたい。

参考にしたページ
condaとpip:混ぜるな危険

そもそも、CentOSにPyenvを入れてPythonの環境を作れる人ならpipだけで困らずに開発環境も構築できると思う。

AnacondaはWindowsでPythonの環境構築をしたい場合とか、OS周りの事はよくわからんというケース向けかな?

TensorFlowがPython 3.7.2で動かなくてPython 3.6系だったら動いたとかハマる時もあるけど、下手に併用するとうっかりやらかしそうなのでPyenvを使うならpipだけでやった方がわかりやすいです。

以上、CentOSにPyenvをインストールするメモでした。

コメント

  1. 匿名 より:

    とても参考になりました!
    一点タイポ?っぽいものが。

    ■ Pyenv のインストール
    # git clone git://github.com/yyuu/pyenv.git ./pyenv

    # git clone https://github.com/yyuu/pyenv.git ./pyenv

    では?

    • miura より:

      コメントありがとうございます。これどっちでもいけますよ。

      gitコマンドが git:// プロトコルをいいように解釈してくれるんだと思います。

      言われて気付きましたがあんまりプロトコル部分を意識してなかったです。

      Git リポジトリの取得

コメントを残す

よく読まれている記事

  • 本日
  • 週間
  • 月間