mypy 0.700 釋出,顯著提升效能,比舊版本快 4 倍
mypy 是處於實驗性階段的 Python 靜態型別檢查器,旨在結合動態型別和靜態型別的優點,將 Python 的表現力和便利性與強大的型別系統和編譯時(compile-time)型別檢查相結合,提供編譯時的型別檢查和高效地編譯為原生程式碼,無需使用重量級和耗費 runtime 開銷的 Python 虛擬機器。
mypy 仍處於開發階段,支援大多數 Python 特性。
最新版的 mypy 0.700 已於兩週前釋出 ,更新內容集中在優化效能方面。官方表示相對於舊版本,mypy 0.700 速度快了 4 倍以上。除此之外,還包括引入新功能、錯誤修復和 library stub (typeshed) 更新,使用以下命令進行升級:
python3 -m pip install -U mypy
效能改進
從該版本起,預設使用由mypyc 編譯得到的 mypy 二進位制檔案,比之前釋出的解釋版本快 4 倍。編譯版本也已經作為單獨的 PyPI 發行版提供有一段時間了,而且這也是預設安裝的第一個版本。
mypyc 是一個編譯器,它將型別註釋的 Python 模組編譯成高效的 CPython C 擴充套件模組。
值得注意的是,對於舊版本可選的 mypy_mypyc 包將不會再進行更新。如果曾使用 mypy_mypyc 包來進行釋出,則應在更新到新軟體包之前先將其解除安裝:
python3 -m pip uninstall mypy_mypyc
64 位的 macOS, Windows 和 Linux 平臺支援編譯版本(要求 Python 3.5 或更高版本)。至於其他平臺則依舊是使用解釋版本,但不提供任何效能改進。編譯版本與大多數解釋版本相容,但某些 mypy 外掛可能與它不相容。可以通過這樣的方式來安裝 0.700 的解釋版本:
$ python3 -m pip install --no-binary mypy -U mypy
更嚴格的相等性檢驗
如果加上引數 --strict-equality 執行 mypy,它會直接檢查相等性,而最後結果有可能總是 True 或 False,因為操作型別不會重疊。
Python 3.4 不支援執行 mypy
不能再使用 Python 3.4 執行 mypy 了,因為 Python 3.4 已經達到了它的生命週期。不過我們仍然可以輸入針對 Python 3.4 的檢查程式碼,官方暫時沒有計劃放棄對此的支援。
改進外掛系統
- 增加 get_additional_deps() 外掛鉤子以支援 django-stubs (PR 6598 )
- 對動態類使用 get_attribute_hook() 外掛鉤子 (lincolnq, PR 6371 )
其他詳細的改進和更新說明請檢視釋出公告 。