暫しのテスト利用とはなるが、折角なので目の前にあるピカピカのCentOS5.4にPython2.6とPython3.1をソースからインストールして試た。
今回やったことは次のことのみ。(ソースのDL場所を作りそこに移動しwgetでファイルを取得。tarで解凍し、コンパイルとインストール作業を2回しただけ)
mkdir ~/DownloadFiles
cd ~/DownloadFiles
wget http://www.python.org/ftp/python/3.1.1/Python-2.6.4.tgz
tar xvzf Python-2.6.4.tgz
cd Python-2.6.4
./configre
make
make install
cd ..
wget http://www.python.org/ftp/python/3.1.1/Python-3.1.1.tgz
tar xvzf Python-3.1.1.tgz
cd Python-3.1.1
./configre
make
make install
このBlog検索の記録からも、時折、検索サイト経由で複数Versionの共存について興味を持った方のご来訪頂くので、その基礎的な内容を記述して置く。
Python配布ソースから、Linuxにインストールする場合、その実態は既定で、/usr/local内に形成され、実行ファイルは、/usr/local/bin内に/python2.6という様なファイル名で、その他のライブラリは、/usr/loca;/lib/python2.6という様なディレクトリ内に、メジャーバージョン番号を伴った名前を付けてインストールされる。従って、セキュリティ、BUG修正によるマイナーバージョンを除き、必要なバージョンを複数インストールすることが出来るのだ。
従って、Pythonでの複数バージョンの共存利用で唯一気にしなければならないことは、既存のPythonで書かれたものがどのバージョンで実行されるのかという仕組みについてだ。
Linuxでこの様に追加インストールした場合、原則、最後にインストールしたものが既定のPython実行環境となる。その確認は、コンソールで「python」と叩いて頂けれは以下の様に容易に確認出来る。ただ、python3.x系についしては、混乱防止の為だろうか、今のところpython3として別途登録されているので、後でインストールしても影響しない。つまり、明示的にpython3として区別して指定する必要がある様だ。
[root@localhost ~]# python
Python 2.6.4 (r264:75706, Nov 5 2009, 23:51:30)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-46)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
同様にその既定バージョン以外のPythonを利用したい場合には、当り前だが、その実行ファイルを「/usr/local/bin/python2.6」等の様に指定すれば、それぞれのバージョンの対話モードが利用可能となる。pythonは起動と同時にバージョン情報をコンソール出力で確認できるので、この点は、利用を始めれば問題はないだろう。
また、「python」と叩くだけで起動する、この既定のPythonのバージョンが何処で決まるかと言うと、環境変数PATHの順番によっている。環境変数はlinuxコマンドenvで表示出来るかと思う。PATHのみを表示させたい場合には以下の様にgrepでPATHのみを抽出すると良いだろう。
[root@localhost ~]# env | grep PATH
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
(Windowsでは、この辺、手動で環境変数PATHを書きかえることで既定が決まるし、標準ではPythonが入っている訳ではない。)
無論、所詮PATHの働きは、カレントディレクトリにpythonがない場合に有効となるので、特定の自作ツールでバージョンを一括で替えたい場合には、「ln -s /usr/local/bin/python3.1 python」等としてシンボリックリンクを張ればそのディレクトリにchして実行する限りは、そのバージョンが既定として利用されることになる。つまりOSの挙動に依存するだけのことである。
また、Pythonに限らず、UNIX系のOSでは、スクリプト系言語の場合には、そのソースコードの一行目の記述により、実行スクリプト言語を明示することが、バージョン齟齬によるトラブル回避には不可欠であり、通常、心あるツールはこれにより制御されている。従って、Linuxでは、インストーラからちょい使いのツールに至る迄、Pythonツールが多く収録されているが、/usr/binにあるpythonを明示利用する為、挙動を替えることはなく、yum等によるOSのupdate時にpythonがマイナーupdateされても問題が起こることはないのだ。
さらに、ユーザ独自に利用するモジュールについては、そのインストールに置いて、利用するバージョンを「/usr/bin/python」とか「/usr/local/bin/python2.3」の様に明示して、「setup.py install」すれば、そのsite-pagkagesにインストールされ、そのバージョンでのみ利用可能となる。かつてのZopeではその依存するpythonをバンドルしてインストール、その利用が既定であった。
ツール作成者がこの辺りを理解し、提供システムを配布する限りトラブルことはない。
LinuxでのPythonのソースからのインストールでは、一般的な開発ツール(gccとそのライブラリ)が当然必要である。これは、後日、ソース提供しかないモジュールを追加するときにも必須なので、OSインストール時に導入し、最新にUpdateしてから利用するとよい。尚、暗号化等一部は、OSの標準インストールでは、そのライブラリがインストールされない為、Python側で後日利用出来ないで困ることもあるかもしれない。その時に、インストール時の記録があると原因が掴み易い。
Pythonのソースインストールでは、そのインストールで、依存する外部ライブラリの存在をチェックし、利用可能なもののみが組込まれ有効となる。当方のCentOSでは、標準的な開発ツールにX関係の開発ツールを加えた程度での実行であり、それ以外に必要なものがあれば、それは正常には実行できない筈だ。インストールに当たっては、後日の為、インストール時の記録を残す為、「script ~/InstallPython20091106.txt」等としてから行ない、終わったら、「exit」して置くことをお勧めする。
Pythonは今、Python3への移行というメジャーイベントの最中だが、著名なモジュールにおいて、Python2.5迄のリリースで止め、移行ステップとして取り組んでいるのではと思えるものある一方、Python2.6に移行済みのものが存在する。また、もうそろそろ2.7も正式リリースになるだろうし、Python3への主要モジュール移行が完了する迄は、恐らく、2.5、2.6、2.7,3.xの4つを対応モジュール次第で混用することになるだろう。その意味でも複数バージョンの使い分けは必要となる。勿論、一番問題になるのは事実上バイナリ供給が必須なWindows向けで、Linixでは2.5に対応していたら、問題になることが殆どないとは思う。
WindowsのPython2.x系では、「python -c "import <モジュール名>;help(<モジュール名>);"」で__doc__として日本語記載したヘルプ情報を表示しようとした場合、lib/site-packages/sitecustomize.pyで「Shift_JIS」系を指定して置く必要がある等、結構使い辛い。それを考えると、出来るならLinixにPythpn2.x系を入れ、lib/site-packages/sitecustomize.pyで「UTF-8」系を指定して、TELNET or SSHで開発した方が楽出来るものと思う。ということで、そろそろ、My NotePCにもLinuxを共生させることにしたい。