2010年10月6日水曜日

Python専用ユーザでPythonバイナリを隔離してみた

私は、Mac OS Xのまっさら (plain vanilla) な環境で何か検証したい時は、新規アカウントを作って作業するようにしています。
そのため、日常的に使っているツールは /usr/local 以下にインストールしたり、MacPorts等のパッケージシステムに頼ったりせずに $HOME/local 以下にインストールするような癖が自然についてしまいました。

この方法はそれなりに便利なのですが、最近になって複数のバージョンのPythonをvirtualenvで使い分ける際に、まだ慣れてないせいかvirtualenv環境ではなく元環境に手を加えてしまうミスを二度も起こしてしまいました。
結局、面倒なのでPython環境を一度全部消してインストールからやり直したのですが、もうちょっと何とかならないだろうか?と考えてみました。

その結果、Python環境をインストールするために専用のユーザを作成してみたのですが、これが割といい感じでしたので、大した内容ではありませんが手順を公開してみます。

尚、私はまだPythonに慣れてないので、「もっと、こうした方がいいよ」等のご意見がありましたらコメント、Twitter、ブクマ等で教えて頂けると助かります。m(__)m

1. Python専用ユーザの作成

アカウントの作成で、新規アカウントを「管理者」、フルネームは「Python」、アカウント名は「python」で適当なパスワードを入力してユーザを作成します。

せっかくなので、ユーザアイコンをPythonのロゴにしてみました。
本当はパスワードを潰して通常のログインは出来ないようにしておきたかったのですが、今回はそこまではやっていません。

2. Python専用ユーザの権限でPythonをインストール

ユーザを作成したので ~python/local 以下にPythonをインストールするのですが、通常ユーザの権限で普通にmakeしてから、インストールだけ sudo -u python make install しようとしたら、makeしたディレクトリへの書き込み権限が無いという理由でエラーになってしまいました。
仕方がないので sudo su python でユーザを切り替えて作業を進めました。

今回インストールしたのは、Python 2.7、Python 3.1.2、それぞれのPython用のdistribute、それぞれのPython用のvirtualenvです。ついでにMercurialの最新版もインストールしてあります。

sudo su python
# sudo なので、ログイン中のユーザのパスワードを入力する

# 作業用ディレクトリの準備
cd
mkdir src

# Python 2.7のインストール
cd ~/src
curl -O http://python.org/ftp/python/2.7/Python-2.7.tar.bz2
tar zxvf Python-2.7.tar.bz2
cd Python-2.7
./configure --enable-ipv6 --prefix=$HOME/local
make
# ここで、必要なら make test を実行
make install

# Python 2.7用のdistributeのインストール
cd ~/src
curl -O http://pypi.python.org/packages/source/d/distribute/distribute-0.6.14.tar.gz
tar zxvf distribute-0.6.14.tar.gz
mv distribute-0.6.14 distribute-0.6.14-2.7
cd distribute-0.6.14-2.7
~/local/bin/python2.7 setup.py install

# Python 2.7用のvirtualenvのインストール
cd ~/src
~/local/bin/easy_install-2.7 virtualenv

# もし必要なら Mercurial 1.6.4のインストール(easy_installだと1.6.3だったので)
cd ~/src
curl -O http://mercurial.selenic.com/release/mercurial-1.6.4.tar.gz
tar zxvf mercurial-1.6.4.tar.gz
cd mercurial-1.6.4
~/local/bin/python2.7 setup.py install

# Python 3.1.2のインストール
cd ~/src
curl -O http://python.org/ftp/python/3.1.2/Python-3.1.2.tar.bz2
tar zxvf Python-3.1.2.tar.bz2
cd Python-3.1.2
./configure --enable-ipv6 --prefix=$HOME/local
make
# ここで、必要なら make test を実行
make install

# Python 3.1.2用のdistributeのインストール
cd ~/src
curl -O http://pypi.python.org/packages/source/d/distribute/distribute-0.6.14.tar.gz
tar zxvf distribute-0.6.14.tar.gz
mv distribute-0.6.14 distribute-0.6.14-3.1
cd distribute-0.6.14-3.1
~/local/bin/python3.1 setup.py install

# Python 3.1.2用のvirtualenv3のインストール(注:virtualenvではなくてvirtualenv3)
cd ~/src
~/local/bin/easy_install-3.1 virtualenv3

# 必要に応じて作業用ディレクトリの後始末
cd
rm -Rf src

# 元のユーザに戻る
exit

3. virtualenv環境の作成

あとは、
export PATH=~python/local/bin:$PATH
でPATHに ~python/local/bin を追加して、virtualenv(Python2系の場合)、virtualenv3(Python3系の場合)でvirtualenv環境を作れば完了です。
virtualenv環境の作り方の詳細については省略しますが、念のためPythonのパスをフルパスで指定した方が安全かもしれません。

本当はvirtualenvwrapperを使ってシンプルにしたかったのですが、どうやら virtualenvwrapper3 では2系と3系のvirtualenvの切り替えはできないらしく、やり方を探しているところです。

4. 終わりに

ユーザディレクトリ以下にPython環境をインストールする代わりに、Python環境のインストール専用のユーザを作成した結果、virtualenv環境下なのかどうか混乱しても、操作ミスでPython環境を消す心配が無くなりました。

Mac OS Xユーザで自前でPythonをインストールしている方はMacPorts等のパッケージシステムを使うか、/usr/local 以下にインストールしている方が多いと思いますが、$HOME以下にインストールしている方は一度試してみてはいかがでしょうか?

ログイン画面にPythonの名前とロゴがあるのも、なかなか乙なものですよw

0 件のコメント:

コメントを投稿