11.5K Star!一個開源的 Python 靜態型別檢查庫

語言: CN / TW / HK

【導語】:Python 靜態型別檢查庫,可以發現程式中潛在的錯誤。

簡介

Mypy 是 Python 的靜態型別檢查庫,可以向 Python 程式新增型別註解,並用 mypy 對它們進行靜態型別檢查,無需執行程式碼即可發現程式中潛在的錯誤。還可以加入到 git hook 中,實現在提交程式碼前自動檢查。Mypy 具有強大且易於使用的型別系統,具有現代功能,如型別推斷、泛型、可呼叫型別、元組型別、聯合型別和結構子型別。

使用 Python 3 註解語法(PEP 484 和 PEP 526)或 Python 2 基於註釋的註解,能夠有效的註釋程式碼並使用 mypy 檢查程式碼中的常見錯誤。

可以在程式中混合使用動態型別和靜態型別,對於遺留程式碼,如果不方便使用靜態型別,可以隨時回退到動態型別。如:

``` from typing import Iterator

def fib(n: int) -> Iterator[int]: a, b = 0, 1 while a < n: yield a a, b = b, a + b ```

對於 Python 2.7,標準註解寫成註釋:

def is_palindrome(s): # type: (str) -> bool return s == s[::-1]

專案地址:

https://github.com/python/mypy

快速開始

使用 pip 進行安裝:

$ python3 -m pip install -U mypy

如果要執行最新版本的程式碼,可以從 git 進行安裝:

$ python3 -m pip install -U git+git://github.com/python/mypy.git

安裝完成後,可以使用以下命令對應用程式的靜態型別進行型別檢查:

$ mypy PROGRAM

執行測試的基本方法:

$ pip3 install -r test-requirements.txt $ python2 -m pip install -U typing $ ./runtests.py

IDE 整合

  • Vim

  • 使用 Syntastic:在 ~/.vimrc 新增 let g:syntastic_python_checkers=['mypy']

  • 使用 ALE:在 ~/vim/ftplugin/python.vim 中新增配置明確啟用,let b:ale_linters = ['mypy']

  • Emas,使用Flycheck和Flycheck-mypy

  • Sublime Text,使用 SublimeLinter-contrib-mypy
  • Autom,使用 linter-mypy
  • PyCharm,使用 mypy 外掛
  • VS Code,已提供對 mypy 的整合
  • 可以加入到 git hook 中,實現在提交程式碼前自動檢查

常用命令

對指定內容進行檢查

$ mypy foo.py bar.py some_directory

該命令是遞迴檢查的,會檢查目錄下對應的所有指定檔案。Mypy 還允許以其他方式檢查指定程式碼:

-m MODULE, --module MODULE: 對提供的模組進行型別檢查,不會遞迴地檢查 -p PACKAGE, --package PACKAGE: 對提供的包進行型別檢查,會遞迴檢查 -c PROGRAM_TEXT, --command PROGRAM_TEXT:將提供的字串作為程式進行檢查 --exclude:遞迴發現要檢查的檔案時忽略指定的檔名、目錄名和路徑

配置檔案

--config-file CONFIG_FILE:從給定檔案讀取配置。覆蓋 mypy 的內建預設值

無型別定義和呼叫

--disallow-untyped-calls:有型別註解的函式呼叫沒有註解定義的函式時報告錯誤 --disallow-untyped-defs,沒有型別註解的函式定義時報告錯誤 --disallow-incomplete-defs,遇到部分註解不完整的函式定義時報告錯誤 --disallow-untyped-decorators,帶有型別註解的函式用沒有註解的裝飾器裝飾時報告錯誤

配置錯誤資訊

--show-error-context:在所有錯誤之前帶有解釋錯誤上下文的訊息 --show-column-numbers:顯示行號 --show-error-codes:顯示錯誤碼 --pretty:格式化錯誤訊息,自動換行、顯示原始碼片段和顯示錯誤位置標記等 --show-absolute-path:顯示檔案的絕對路徑

錯誤資訊生成

--any-exprs-report DIR:在指定目錄中生成一個文字檔案報告 --cobertura-xml-report DIR:在指定目錄中生成 Cobertura XML 型別檢查報告,必須安裝 lxml 庫才能生成此報告 --html-report / --xslt-html-report DIR:在指定目錄中生成 HTML 型別檢查報告,必須安裝 lxml 庫才能生成此報告 --lineprecision-report DIR:在指定目錄中生成一個純文字檔案報告,其中包含每個模組的型別檢查行數等統計資訊

開源前哨 日常分享熱門、有趣和實用的開源專案。參與維護 10萬+ Star 的開源技術資源庫,包括:Python、Java、C/C++、Go、JS、CSS、Node.js、PHP、.NET 等。