看到有朋友在問 python 2 和 python 3 有何差距, 來寫一下自己的理解。先聲明, 我沒有實際轉過。
之前曾在別的地方讀到版本編號的含意, 忘了出處, 找了一下發現 RubyGems 的說明和我先前看到的內容一樣, 對版本 a.b.c 來說:
- a 往上 +1, 表示有大幅改版, 會有不向下相容的部份, 官方 release note (或 changelog) 裡會描述那些地方沒有向下相容 (backwards incompatible changes), 如 Fabric 的 Changelog 有提到那些函式行為和之前不同。
- b 往上 +1, 表示有曾加新 feature 或 bug fix, 但介面沒有改變, 可以安心昇級
- c 只是修改實作方式, 對使用者來說, 行為完全沒變。
當然還有許多其它的表示方式, 就.....先忽略它們好了。說明這點是想強調 2 到 3 的難處, 在於有些不相容的改變。
《Case study: porting chardet to Python 3 - Dive Into Python 3》提供一個轉換的案例, 其中 Fixing What 2to3 Can’t 說明要手動修改的部份。
除了修改自己程式的問題外, 但是若別人的程式沒有升到 3, 改完也沒用。比方說大家都愛用的 NumPy, 官方說目前只支援 2.4 ~ 2.6, 像 SciPy 或 matplotlib (強大的繪圖函式庫) 會用到 NumPy, 在 NumPy 升上去以前, 它們也無法升級。所以在重量級 packages 支援 python 3 以前, 一般使用者仍不方便升到 python 3。
2011-07-30 Updated
看到 Python 3 Wall of Shame 有統計各 package 被下載的次數以及是否支援 python 3, 才發覺原來 NumPy 已支援 Python 3 了。
2011-07-31 Updated
經 WanCW 和 Eric Chen 提醒, 更新如下:
* 版號的定義是寫在 Semantic versioning
* matplotlib 已有官方的 Python3 branch
2011-08-02 Updated
經 Eric Chen 提醒, SciPy 也有支援 3.x。
文中提到的版本編號規則應該是 Semantic Versioning
回覆刪除http://semver.org/
SciPy已有Python3版本,matplotlib也有官方的Python3的branch了喔(https://github.com/matplotlib/matplotlib-py3)!
回覆刪除謝啦兩位, 已更新內文。
回覆刪除@EricChen 我在 SciPy 官方下載頁面沒看到 python3, 請問一下消息來源的出處是?
http://sourceforge.net/projects/scipy/files/scipy/0.9.0/
http://sourceforge.net/projects/scipy/files/scipy/0.9.0/
回覆刪除下方的README.txt中有寫喔!
"This release requires Python 2.4 - 2.7 or 3.1 - and NumPy 1.5 or greater."
soga, 謝啦
回覆刪除