Edited at

PyenvによるPython3.x環境構築(CentOS, Ubuntu)

More than 3 years have passed since last update.


はじめに

pythonでアプリケーションを作ることになったのでデフォルトでOSに入っているpython2.x系でいいかなと思ったのだが、Python 2 と Python 3 のどちらを使って開発すべき?を読むともうPython3.xは安定しているとのことなので、pyenvでシステムワイドにPython3.xを利用できる環境を構築してみた。

はじめはpyenvだけの管理でいいかなと思ったが、各pythonのインストールは結構時間がかかり手軽に環境を削除再構築が出来なさそうなのでvirtualenvも導入した。


環境


  • OS:CentOS 6.5, Ubuntu14.04


Step1: 必要なパッケージのインストール

pythonのコンパイル時に必要なパッケージのインストール。


CentOS

$ sudo yum install gcc bzip2 bzip2-devel openssl openssl-devel readline readline-devel



Ubuntu

$ sudo apt-get install git gcc make openssl libssl-dev libbz2-dev libreadline-dev libsqlite3-dev



Step2: Pyenvのインストール

githubから取得します。

$ cd /usr/local/

$ sudo git clone git://github.com/yyuu/pyenv.git ./pyenv
$ sudo mkdir -p ./pyenv/versions ./pyenv/shims


Step3: Pyenv-virtualenvのインストール

virtualenvで各バージョンの中で個別の環境を用意したいのでpyenv-virtualenvプラグインをインストール。

$ cd /usr/local/pyenv/plugins/

$ sudo git clone git://github.com/yyuu/pyenv-virtualenv.git


Step4: Path設定

/etc/profile.d/pyenv.shを作成します。

$ echo 'export PYENV_ROOT="/usr/local/pyenv"' | sudo tee -a /etc/profile.d/pyenv.sh

$ echo 'export PATH="${PYENV_ROOT}/shims:${PYENV_ROOT}/bin:${PATH}"' | sudo tee -a /etc/profile.d/pyenv.sh
$ source /etc/profile.d/pyenv.sh # 設定反映
$ pyenv --version
pyenv 20141211-6-g995da2d
$

sudo時にPATHとPYENV_ROOTを引き継ぎたいのでsudo時にPATHを引き継ぐ方法と同様にvisudoで以下のように編集。

#Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

Defaults env_keep += "PATH"
Defaults env_keep += "PYENV_ROOT"


Step5: Pyenvの使い方

ヘルプを見る限りrbenvと使えるコマンドは同じらしい。

$ pyenv --help

pyenv 20141211-6-g995da2d
Usage: pyenv <command> [<args>]

Some useful pyenv commands are:
commands List all available pyenv commands
local Set or show the local application-specific Python version
global Set or show the global Python version
shell Set or show the shell-specific Python version
install Install a Python version using python-build
uninstall Uninstall a specific Python version
rehash Rehash pyenv shims (run this after installing executables)
version Show the current Python version and its origin
versions List all Python versions available to pyenv
which Display the full path to an executable
whence List all Python versions that contain the given executable

See `pyenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/yyuu/pyenv#readme
$


Step6: Pythonインストール

インストールできるバージョンの確認。

$ pyenv install --list

2014/12/28時点で最新の3.4.2をインストール。

$ sudo pyenv install -v 3.4.2

$ pyenv versions
* system (set by /usr/local/pyenv/version)
3.4.2
$

各ユーザーのデフォルトのpythonのバージョンを3.4.2に変更。

$ sudo pyenv global 3.4.2

$ pyenv versions
system
* 3.4.2 (set by /usr/local/pyenv/version)
$ python --version
Python 3.4.2
$


Step7: virtualenvの作成

以下のコマンドで既存のpythonバージョンを利用した環境を作成することができる。

pipなどでインストールしたパッケージは環境によって異なるので手軽にパッケージインストールできる。

$ sudo pyenv virtualenv 3.4.2 dev01-3.4.2

$ pyenv versions
system
* 3.4.2 (set by /usr/local/pyenv/version)
dev01-3.4.2
$ sudo pyenv local dev01-3.4.2 # 現在の環境をdev01-3.4.2に変更
$ pyenv versions
system
3.4.2
* dev01-3.4.2 (set by /usr/local/pyenv/plugins/.python-version)
$

pipでgunicornをインストールしてみる。

$ sudo pip install gunicorn

$ pip list
gunicorn (19.1.1)
pip (1.5.6)
setuptools (2.1)
$ sudo pyenv local 3.4.2
$ pip list # 3.4.2環境にはgunicornはインストールされていない。
pip (1.5.6)
setuptools (2.1)
$

以下のコマンドでdev01-3.4.2を削除することができる。

$ sudo pyenv uninstall dev01-3.4.2

pyenv: remove /usr/local/pyenv/versions/dev01-3.4.2? y
$ pyenv versions
system
* 3.4.2 (set by /usr/local/pyenv/plugins/.python-version)
$


おわりに

pyenvを用いればシステム初期時のpython環境を気にせずにpython3.x系を簡単にインストールでき、python2.x系とpython3.x系の動作検証を一つのOS上に簡単に構築できそう。

あとrbenvやpyenvのラッパーであるanyenvというものがあり、複数言語のenvツールを利用するならこちらのほうが便利そう。

anyenvで開発環境を整える

おしまい。