2015年1月24日土曜日

pythonzとvirtualenvでPythonの複数バージョン共存の環境構築

Pythonの進化

Pythonは今現在も進化しており、バージョンによってかなり違ってきます。
特にPython 3は根本から見直されており、Python 2から大幅に変更されています。
ですからスクリプトをテストするにもどのバージョンで動くのかは重要になってきます。

新規で作るなら新しいほうが将来性があるのですが、古いバージョンで確かめなければならない時もあり、一様に新しければ良いと言うものでもありません。

そこで一つのシステムで複数バージョンの共有環境を作ります。

複数バージョンの共有

複数バージョンの共有は単純にフォルダを分けてもできないことはないのですが、ライブラリや管理ツールなどどこで何に依存しているかわからなくなってしまうためここは、複数バージョンを分離してインストール出来るpythonzとPythonを仮想化して動かせるvirtualenvを使用して複数バージョンを安全に管理したいと思います。

現在のシステム環境:

カーネル: Linux
カーネルバージョン: 3.10.0-123.el7.x86_64
ディストリビューション: CentOS 7
システムのPythonバージョン: 2.7.5

virtualenvをインストール

まずvirtualenvをpipでインストール
pipが入ってない人はyumかeasy_installで入れてください。

$ sudo easy_install pip
$ sudo pip install virtualenv

ついでにvirtualenvwrapperというvirtualenvを便利に使うためのツールもインストールします。
$ sudo pip install virtualenvwrapper


シェルのスタートアップファイルに以下を追記します。
$ vi ~/.bashrc

export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/Devel 
source /usr/bin/virtualenvwrapper.sh

WORKON_HOMEはそのディレクトリに仮想環境が構築されるという意味です。
PROJECT_HOMEはプロジェクトを作成するときに使用します。
virtualenvwrapperの位置は環境に依存します。

$ which virtualenvwrapper.sh

で位置をたしかめてください。
シェルに反映させてバージョン確認ができれば成功です。

$ virtualenv --version
12.0.5

pythonzのインストール

pythonzはシステムのPythonを元に構築されるのでシステムに2.6以上のPythonと開発ツール、以下の開発ライブラリが必要です。
$ sudo yum groupinstall "Development tools"

zlib-devel bzip2-devel openssl-devel readline-devel ncurses-devel sqlite-devel gdbm-devel db4-devel expat-devel libpcap-devel xz-devel pcre-devel

CentOS 7では以下のライブラリが足りなかったので追加してからpythonzのインストールを行います。
$ sudo yum install zlib-devel openssl-devel

pythonzのインストール
$ curl -kL https://raw.github.com/saghul/pythonz/master/pythonz-install | bash

~/.bashrcに以下を書き込み
[[ -s $HOME/.pythonz/etc/bashrc ]] && source $HOME/.pythonz/etc/bashrc

以上でpythonzがhome配下にインストールされますが、PYTHONZ_ROOT=パス のオプションで任意の場所にインストールできます。
ちなみに環境変数は/etc/profile.d/pythonz.sh に書き込まれます。

インストールの確認
$ pythonz version
1.7.0

バージョン別のPythonをインストールするにはバージョンを指定するだけです。
インストール出来るバージョンは以下のコマンドで確認して下さい。
$ pythonz list -a

次は2.7.9 と 3.4.2のバージョンを取り込む例です。
$ pythonz install 2.7.9 3.4.2

少し時間がかかりますがInstalled CPython-(version) successfully.と出れば成功です。
$ pythonz list
# Installed Python versions
  CPython-2.7.9
  CPython-3.4.2
さて環境は整いましたのでPythonの仮想実行環境を作成しましょう。
mkvirtualenvコマンドで作成しま
-pオプションで使用するバージョンのPythonのパスを、その後ろに作成する仮想環境のディレクトリ名を指定します今回は分かりやすいpython27 python34としました。
&& deactivateは作成すると自動的に仮想環境内に入るため作成のみの場合はdeactivateを指定します。

$ mkvirtualenv -p ~/.pythonz/pythons/CPython-2.7.9/bin/python python27 && deactivate
$ mkvirtualenv -p ~/.pythonz/pythons/CPython-3.4.2/bin/python python34 && deactivate

$ workon
python27
python34

workonコマンドで作成された仮想環境を表示します。

では仮想環境内に入ってみましょう。
作られた仮想環境はWORKON_HOMEに指定された場所にあります。
$ ls .virtualenvs/
get_env_details  postdeactivate    postrmvirtualenv  premkproject     python27
initialize       postmkproject     preactivate       premkvirtualenv  python34
postactivate     postmkvirtualenv  predeactivate     prermvirtualenv
$ cd .virtualenvs/python34
$ ls
bin  include  lib

$ source bin/activate
(python34) $ 
$ python --version
Python 3.4.2
仮想環境へはsource コマンドでbinにあるactivateを反映させることで仮想環境内に入ることができます。入っていればシェルプロンプトの前に(仮想環境名)が表示されています。
versionを確かめてみれば確かにシステムと違うバージョンになっています。

これで通常の環境と同じようなPython仮想環境が作成できました。
deactivateコマンドでいつでも仮想環境から抜け出せます。

$ deactivate
$ python --version
Python 2.7.5




0 件のコメント:

コメントを投稿

Pythonで地図空間データを扱う⑤

ベースの地図が出来た所で、他のデータを被せてみます。 国土地理院の  500mメッシュ別将来推計人口データ  を使用します。 同じく神奈川県のデータ  500m_mesh_suikei_2018_shape_14.zip をダウンロードします。 ベースの地図データと同じ場所に展開...