2008年1月26日 星期六

在 Mac 上編譯 Python 3 的問題

Python 3 (a.k.a. Py3k) 目前已經推出 3.0a2 的版本,我拿到 Mac 系統上編譯時,下的參數為:

./configure --prefix=/usr/local --enable-framework --enable-toolbox-glue --with-threads

結果在編譯時會出現這樣的錯誤:
LookupError: unknown encoding: X-MAC-TRAD-CHINESE

看起來是目前抓到的 encoding 會讓某個函式庫無法完成編譯,所以我修改了 Lib/io.py 這個檔案,然後把
encoding = locale.getpreferredencoding()

換成
encoding = "utf-8"

這樣就可以順利完成編譯了!

2008年1月24日 星期四

哪裡會用到 Python ?

如我們所知,Python 是一個 scripting language,只要有 Python 直譯器 (interpreter) 就可以執行 Python 程式。Python 在目前主流的作業系統如:Windows, Linux/Unix, Mac 等上都有相同版本的直譯器可以下載,你當然就可以在這些平台上撰寫 Python 程式。

從桌面系統的程式來說,Windows 上的 Python 可以透過 ctypes 使用 Windows API,也可以使用 IronPython 來結合 .Net framework 的程式庫;wxPython, PyGTK, PyQt, Jython 都是可以跨平台寫出 GUI 程式的函式庫,一些 GNOME 或 KDE 的 widget 就是用 PyGTK 或 PyQt 所寫出來的呢!而 Mac OS X 上當然也有 Python-Cocoa binding -- PyObjc 囉,這個只要灌好 Xcodes 就直接能用 Python 來寫 Mac OS X 應用程式。

除了桌面系統、個人電腦上執行的 Python 程式,在 Web 開發上也可以使用到 Python,除了直接使用 Python 的 CGI 函式庫或是直接處理 HTTP protocol,你也可以使用像是 Zope, Plone, TurboGears, django 等等 web 開發框架 (framework) 更直接地處理關於 web 的運算、顯示及資料儲存等。

另外,手持裝置當然也能執行 Python 程式,有人已經將 Python 直譯器放進破解的 iPhone/iPod touch, WinCE 系列的 smart phone 當然也能執行 Python,而 Symbian S60 也有弄出一套 PyS60,也就是讓你透過 Python 語言在 Symbian 系統上開發程式。

這樣乍看之下,Python 跟 Java 好像還有那麼一點點相像呢!不管是在 desktop, server, mobile device 都可以看到它們的影子,不過比起 Java, Python 的 code 可是輕巧得多,雖然 Python 有硬要縮排,以及稍稍殘廢的 OOP 架構等小缺點,但寫起 Python 程式,這些小缺點可說是瑕不掩瑜...

Python 已當選了 2007 年度程式語言,不如趁機來好好學學(寫寫)Python 吧!

喜歡 Python 的理由

第一次聽到 Python 的時候,只知道它是一個要認縮排的語言,對於這個限制雖然感到不解,卻也沒有仔細去思考它的設計哲學,直到過了很久以後,真的開始學了 Python,才開始愛上了這個大家都認為十分簡單的語言。
Python 有多簡單?大多數的人都可以在一個星期內快速上手。常見的資料結構也幾乎都可以用它內建的三種資料結構(tuple, list, dictionary)搭出來,資料結構中可以混合不同型別的資料,可以免除很多像 C++ 這類編譯語言的限制,使程式設計師能夠更關注在於該做的事,而不是該如何去做。而且絕大多數的系統都有提供 Python 的直譯器,所以它既可以跨平台,也不需要 compiler,很適合用在一些和效能較為無關的地方,像是 UI,因為修改非常方便!若是要計較效能的話,Python 要和 C/C++ 整合可是一點都不難,透過 swig/ctypes/sip 之類的工具,你可以很輕鬆地在 Python 裡呼叫以 C/C++ 所撰寫的函式。
其它的小地方,像是 Python 內建支援大數、複數、Unicode,甚至很特別地支援 if 1 < x < 2 這樣的寫法,都是很吸引我的特色。雖然我接觸 Python 的時間才短短兩、三個月,但是我實在太喜歡 Python 了,於是想要在這裡和大家分享我一些學習的心得筆記,希望可以幫助一些同樣想要入門的朋友們。希望大家多多指教。