實驗性的 Python 3 支援
一點歷史
五月時,Vinay Sajip 發布了一個分支,證明了使用單一程式碼庫同時支援 Python 2 和 3 是可行的,並且能夠通過整個測試套件。這個分支建立在 Martin von Löwis 先前的努力之上。
不久之後,核心團隊決定使用 six 作為相容層,而不是一個臨時的函式庫。目的不僅僅是滿足 Django 的需求,也是選擇一個能廣泛適用於整個生態系統的解決方案。從 Django 1.5 開始,six將會捆綁為django.utils.six,因此對於所有使用與 Django 相同的移植策略的 Django 應用程式都可用。
朝向 Python 3 支援的第一步是移除uUnicode 字串的前綴,並加入unicode_literals未來匯入。這個變更是在七月於歐洲 DjangoCon 開發衝刺期間提交的。
接著,大部分的工作在過去幾個星期完成,有數百次的提交更新了 Django 的各個部分。
核心團隊專注於編寫相容於 Python 2 的 Python 3 程式碼,而不是相反,以確保程式碼庫的未來適用性。為了避免混淆,名稱包含string或unicode的函式和類別,分別重新命名為bytes和text。因此,此移植比 Vinay Sajip 的概念驗證更具侵入性。
好的一面是,由於字串編碼和解碼操作需要在 Python 3 下正確執行,因此在移植過程中校正了一些近似值。即使相容程式碼增加了一些雜訊,最終的程式碼在許多地方都更加清晰。
我想感謝所有為這個龐大專案做出貢獻的社群成員和核心開發人員。
下一步是什麼?
這是否表示 Django 已經準備好在 Python 3 上使用了?還沒!
首先,Django 在 Python 3 下幾乎沒有經過實際測試。可以將該程式碼視為 pre-alpha 版本。
然後,雖然核心團隊盡力消除了錯誤,但測試套件並未涵蓋 Django 的所有可能用法。這就是社群可以貢獻的地方。
我們需要您的協助來測試 Django 的開發版本,不僅要回報 Python 3 上的錯誤,也要回報 Python 2 上的回歸錯誤。雖然 Django 在向後相容性方面非常保守,但錯誤總是可能發生,而且大量的重構工作很可能會引入一些回歸錯誤。
最後,Django 不僅僅是一個網頁框架 — 它是一個可外掛應用程式的生態系統。目前,很少有第三方應用程式支援 Python 3。強烈建議作者盡快移植他們的可外掛應用程式。移植提示可在文件中找到。