2009年1月3日

在 Mac OS X 10.5 上安裝 Python 3.0

Python 3.0 在 2008/12/3 發佈,雖然 MacPorts 已經收錄,但 MacPython/Leopard 還在 2.5,要等到 Apple 收進 Mac OS X 裡恐怕還要等好一陣子,所以想嘗鮮又不熟 MacPorts 的人(是說我自己),就要自己裝了。

在 Mac OS X 上安裝 Python 3.0 沒什麼難的,只要依 ijliao 所說:「真男人用 tarball 手動安裝程式」就一切搞定。不過 Python 3.0 在語法、物件、函式庫上都有新東西,想要熟悉它,用互動環境邊打邊學是一定要的,那就絕對要裝讓你可以用上下左右鍵叫回程式敍述東改西改的 readline 函式庫,不然你會 copy & paste 到瘋掉。

安裝 readline 函式庫

Readline 函式庫可以在 ftp://ftp.cwru.edu/pub/bash/ 找到,我用的是 5.2 版,可以下載 readline-5.2.tar.gzreadline-5.2-patches 目錄中所有的補丁。在著手安裝之前,你也許應該確認一下這些檔案的完整性

安裝方式很簡單。假設你已經把檔案下載放在你的桌面,先開啟終端機(Terminal),再依以下指令操作即可。
$ cd ~/3party  # 或任何你喜歡的目錄
$ tar zxvf ~/Desktop/readline-5.2.tar.gz
$ cd readline-5.2
$ cat ~/Desktop/readline52-0?? | patch -p 0
$ ./configure
$ make
$ sudo make install
這就完成了,會把兩個函式庫 libreadline 和 libhistory 裝到 /usr/local/lib 目錄去,每個函式庫都有四個不同副檔名的檔: .a、.dylib、.5.dylib、.5.2.dylib,其中 .dylib 和 .5.dylib 是指到 .5.2.dylib 的 symlink。

安裝 Python 3.0

Readline 裝好後,下載 Python 3.0 的原始碼 tarball 安裝就 OK 啦!
$ tar zxvf ~/Desktop/Python-3.0.tgz
$ cd Python-3.0
$ ./configure --enable-framework
$ make
$ sudo make frameworkinstall
$ cd /Library/Frameworks/Python.framework/Versions/
$ sudo rm Current
$ sudo ln -s 2.4 Current
最後這幾步是因為用 frameworkinstall 才會把 Python 3.0 裝進系統的 Python.framework 目錄,但會把預設 python 改成 3.0,為了不干擾系統其他 python scripts 的運作,要再把預設改回成 2.4。

請享用你的 Python 3.0 吧!

3 則留言 :

  1. OSX 10.5 的 Python 預設不是 2.5 嗎?

    回覆刪除
  2. 是 2.5 沒錯,但是...

    $ ls -l /System/Library/Frameworks/Python.framework/Versions/
    total 8
    drwxr-xr-x 7 root wheel 238 Oct 25 2007 2.3
    drwxr-xr-x 11 root wheel 374 Dec 4 22:43 2.5
    lrwxr-xr-x 1 root wheel 3 Oct 26 2007 Current -> 2.5

    $ ls -l /Library/Frameworks/Python.framework/Versions/
    total 8
    drwxrwxr-x 10 root admin 340 Oct 18 2006 2.4
    drwxr-xr-x 9 root admin 306 Jan 4 03:02 3.0
    lrwxr-xr-x 1 root admin 3 Jan 4 12:07 Current -> 2.4

    把 Current 設回 2.4 是保險的作法,免得不知哪裡的 script 被搞死,反正打 python3.0 就會叫出 Python 3.0 了。

    回覆刪除
  3. hmm..我的系統裡只有 /System/Library/Frameworks 下有 Python.framework,所以我沒有 2.4

    所以我 --enable-framework=/System/Library/Frameworks

    回覆刪除