macで蛇使い入門記:Pythonのバージョンとインストール

この記事(多分シリーズ)の前提

  • OSはMacOSX 10.6 Snow Leopard
  • macportsの環境整備済みであること。
  • 多分文法の話はしない。
  • 多分Java使い向けに話す。っていうか俺向けに話すw

Pythonのバージョン

Pythonの最新バージョンは3.x系。2系から3系になるにあたって、多少互換性を失っているぽい。

だが、2.x系が未だ主流。Google App EngineではPython2.5を採用、その他ではPython2.6を採用するイメージっぽい。

まぁ、これから時代は3系になっていくのだろうけど、まだ色々環境を整備しづらかったり、トラブルも多いのかも。ということで、Python2.6環境を中心に、場合によってはPython2.5を使えるように、まぁ気が向いたらPython3系も使えるように、という感じの環境を作ってみたい。

Snow LeopardにおけるPyhton

確かOSデフォで入ってるんですよね。以下のコマンドを叩いて、色々確認してみる。自分の場合は、macportsでもさらにインストールされていて(多分git-coreを入れた時に推移依存で)、既に複数のPythonが同居してました。まず、portsで入っているpythonの確認。

$ port list installed | grep py
python26                       @2.6.6          lang/python26
python_select                  @0.3            sysutils/python_select

そして状況を追いかけてみる。

$ python -V
Python 2.6.6
$ which python
/opt/local/bin/python
$ ls -l `which python`
lrwxr-xr-x  1 root  admin    24B 10 13 16:08 /opt/local/bin/python@ -> /opt/local/bin/python2.6
$ ls -l /opt/local/bin/python2.6
lrwxr-xr-x  1 root  wheel    73B  9 29 19:45 /opt/local/bin/python2.6@ -> /opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin/python2.6
$ ls -l /opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin/python2.6
-rwxr-xr-x  2 root  wheel   8.4K  9 29 19:45 /opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin/python2.6*

何も考えずにpython叩いた時に呼ばれているのは、 /opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin/python2.6 にある v2.6.6 のようです。パスから推測するに*1、これがportsで入れたpython26だな、と判断。

$ python[TAB]
python            python2.5         python2.6         python_select     pythonw2.5       
python-config     python2.5-config  python2.6-config  pythonw           pythonw2.6   

コマンドラインからpythonで補完すると、色々でてきた。こいつらを色々追いかけてみると、自分のmacの中には、ざっと4つのpython実行ファイルがあることが確認できた*2。これらを図解で整理するとこう。

プロンプトに python って打つと(緑)、どこに繋がるのか。青がシンボリックリンクで、赤が実体。恐らく、背景色なしの部分がmacosにデフォで入っているもので、オレンジの背景の部分がmacportsで作られた環境。というわけで、macports環境を作っていない人は、 /usr/bin/python (v2.6.1) にたどり着き、自分は一番上の v2.6.6 にたどり着いたのだろう。

環境の切替

python_selectっていうコマンド(portsパッケージ)がありました。とりあえず触ってみる。-lオプションで選択肢一覧表示、-sオプションで現在の選択状態を表示、です。

$ python_select -l
Available versions:
current none python26 python26-apple
$ python_select -s
python26

currentとnoneってのは未調査。とりあえずpython26になっているので、python26-appleに切り替えたり戻したりしてみよう。

$ sudo python_select python26-apple
Selecting version "python26-apple" for python
$ python -V
Python 2.6.1
$ sudo python_select python26
Selecting version "python26" for python
$ python -V
Python 2.6.6

これだけで、macosデフォのpythonportsのpyhtonを切り替えられる。

macportsでpython25をインストール

$ sudo port install python25
(略)
$ python_select -l
Available versions:
current none python25 python26 python26-apple

python_selectでpython25も選択できるようになりました。

んじゃ、他のバージョンは?

$ port search python
(略)
python24 @2.4.6 (lang)
    An interpreted, object-oriented programming language

python25 @2.5.5 (lang)
    An interpreted, object-oriented programming language

python26 @2.6.6 (lang)
    An interpreted, object-oriented programming language

python27 @2.7 (lang)
    An interpreted, object-oriented programming language

python31 @3.1.2 (lang)
    An interpreted, object-oriented programming language

python32 @3.2a2 (lang)
    An interpreted, object-oriented programming language

おう、色々あるやん。とりあえず3.2いってみっかー!

$ sudo port install python32
--->  Computing dependencies for python32--->  Fetching python32
--->  Verifying checksum(s) for python32
--->  Extracting python32
--->  Applying patches to python32
--->  Configuring python32
--->  Building python32
Error: Target org.macports.build returned: shell command failed
Log for python32 is at: /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_ports_lang_python32/main.log
Error: Status 1 encountered during processing.
To report a bug, see <http://guide.macports.org/#project.tickets>

あ、なんかダメ…。3.2a2とかになってるから、まだ不安定なんかな。3.1にしておこう。

$ sudo port install python31
(略)
$ python_select -l
Available versions:
current none python25 python26 python26-apple python31

ま、色々やったけど今後しばらくは、2.6の世界だろうから、python26に設定しておこう。

$ sudo python_select python26

さて

ここまで行けば、各バージョンのインタラクティブシェルが動かせるようになる。あとはみんなのPythonとか読んで、文法と基礎的なAPIを把握すんべ。

みんなのPython 改訂版

みんなのPython 改訂版

つづく。と思う。多分。恐らく。

*1:/opt/local以下だから

*2:もっとあるかも。