推薦免費、輕量、實用的 Python IDE

PyDev固然好用,但我不得不承認它真的太肥了(真正肥的是它底下的 Eclipse :p)。但臨時要在別台機器上找個 Python IDE 方便除錯,或是做短期的開發,就需要找個免費、輕量、實用的 Python IDE。

下面這幾個 IDE 先被刷掉了:

  • Komodo Edit – Komodo IDE 的免費開源版本;ActiveState 出品有信心,但安裝程式有 42MB 還是肥了一點。
  • IDLE – 太陽春了…
  • wxGlade – 2009-10-13 後就沒再釋出新版本。

結果發現 PyScripter 真是讓人驚豔!

  • 提供免安裝版本,壓縮檔只有 5MB。
  • 像是 Notepadd++ 之於 Notepad,PyScripter 雖然小巧,但該有的功能都有了(例如除錯、單元測試、Tab 轉空白、Tab 縮排、自動完成、自動去掉結尾的空白等),不輸專業的 IDE。
  • 有專案的概念;把 .py 從其他地方匯進來,再補上特有的 PYTHONPATH(在專案節點上點右鍵,選 Extra Python Path…),就形成一個專案。

真的是該有的都有的,唯一的遺憾就是它只能運作在 Windows 平台上。

還有一些沒來得及評估的 IDE,有誰可以分享一下使用心得呢?

Note

參考資料

廣告

PHP Web Framework 搜查

簡單地搜索了一下,抬面上比較知名的 PHP Web framework 有:

印象中 CakePHP、CodeIgniter 與 Kohana 等都曾盛行一時,不過這個市場經過重新洗牌,現在大家討論的焦點似乎都轉移到 Symfony 跟 Yii 身上。

要從這些討論理出一個頭緒出來,實在是一件很累人的事。每個框架都有各自的支持者,當有人宣稱某個框架比較好時,總會有另一個陣營的人跳出來嗆聲。當然,如果沒跳出來,大概就意謂著支持者已經散去了… :p

Yii 似乎是跟 Symfony 不分軒輊,有些地方甚至還是優於 Symfony?

如果沒辦法分出高下,最後只能從各自的成功案例來下手。從這個面向來看,Symfony 幾乎是把 Yii 遠遠的拋在後面;雖然 Yii 的成功案例也不少,但好像都不是什麼知名的專案。反觀 Symfony,成功案包括 Yahoo! BookmarksYahoo! AnswersDeliciousDailymotion 等,一個比一個大咖。

其中最關鍵的就是 Yahoo 採用了 Symfony,下面的投影片說明了為什麼它要採用 Symfony:

有 Yahoo 跟 Dailymotion 的背書,看來 Symfony 似乎是現在最好的選擇了。

不過就像一位 Symfony 支持者在這裡所說的 – “if i didn’t use Symfony i would have used YII"。或許 Yii 真的有過人之處,只是還沒有被發掘而已?

過去多少紅極一時的框架都被新進的框架所取代了,所以現在要看的是 “當下" 那個框架的文件資源最豐富、社群最活躍… 永遠要記住 “沒有最好的框架,只有適不適合使用而已"。

Note

參考資料

用 Python 抓取伺服端寫出的 Cookie 資訊

首先透過瀏覽網頁來取得 cookie:

>>> import cookielib, urllib2
>>> cookie_jar = cookielib.CookieJar()
>>> opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie_jar)) 1
>>> opener.open('http://www.google.com') 2
<addinfourl at 142980844 whose fp = <socket._fileobject object at 0x883892c>>
>>>
>>> cookies = [cookie for cookie in cookie_jar] 3
>>> cookie = cookies[0]; cookie
Cookie(version=0, name='PREF', value='ID=355d24f8b83c55e6:FF=0:TM=1322534559:LM=1322534559:S=cEQeul_fl-MLjwoZ', port=None, port_specified=False, domain='.google.com', domain_specified=True, domain_initial_dot=True, path='/', path_specified=True, secure=False, expires=1385606559, discard=False, comment=None, comment_url=None, rest={}, rfc2109=False)
>>>
>>> dir(cookie)                                 4
['__doc__', '__init__', '__module__', '__repr__', '__str__', '_rest', 'comment', 'comment_url', 'discard', 'domain', 'domain_initial_dot', 'domain_specified', 'expires', 'get_nonstandard_attr', 'has_nonstandard_attr', 'is_expired', 'name', 'path', 'path_specified', 'port', 'port_specified', 'rfc2109', 'secure', 'set_nonstandard_attr', 'value', 'version']
>>> cookie.name, cookie.value
('PREF', 'ID=355d24f8b83c55e6:FF=0:TM=1322534559:LM=1322534559:S=cEQeul_fl-MLjwoZ')
1 準備一個容器(cookielib.CookieJar)來存放 cookie。
2 存取網頁的過程中,urllib2.HTTPCookieProcessor 就會將收到的 cookie 寫到 cookie jar 裡頭。
3 CookieJar 本身實作 iterator protocol,藉以取出所有的 cookie。當然這一行也可以簡單寫成 cookies = list(cookie_jar)
4 Cookie 所有的資訊都透過 attribute 公開出來,其中最常用的就是 namevalue
Note 注意 CookieJar 取出的 cookie,它的型態是 cookielib.Cookie,跟 Cookie.BaseCookie 沒有關係(常用在 server-side),不要搞混了。

可惜 CookieJar 並不是個 dictionary-like object,否則用起來會更方便。不過只要簡單一行程式就可以轉換過來:

>>> cookies = dict([(cookie.name, cookie.value) for cookie in cookie_jar])
>>> cookies.keys()
['PREF', 'NID']
>>> cookies['PREF']
'ID=c1dc8c58680de189:FF=0:TM=1322534559:LM=1322534559:S=SL2sEAprvMY3wrE-'
Note

參考資料