kyomind / blog-reply

Code and Me 部落格留言
https://blog.kyomind.tw/
0 stars 0 forks source link

Python type checker:Mypy 介紹 - Code and Me #41

Open utterances-bot opened 3 months ago

utterances-bot commented 3 months ago

Python type checker:Mypy 介紹 - Code and Me

本文從歷史發展、工作原理與整體輪廓上介紹 Mypy 的特色。更了解 Mypy,可能讓你對 Python 的型別檢查產生不同的看法。

https://blog.kyomind.tw/mypy/

gbaian10 commented 3 months ago

好奇對第三方套件怎麼正確引用 type hint? 因為不是所有第三方套件都有型別註釋或者附帶 py.typed 寫個 .pyi 好像又很麻煩,到現在依然不熟如何正確使用 .pyi

kyomind commented 3 months ago

@gbaian10 如果沒有專用的 stubs 套件,而 typeshed 也沒有收錄,那就算了XD

gbaian10 commented 3 months ago

預設的 Mypy 其實非常寬容,但我已經不記得預設 mypy 到底長怎樣了XDD,只記得一開始用的時候直接給他 strict = true 開下去,然後第一次檢查大概就噴兩三百個警告,真的是不是從一開始就用,後續要導入很困難。

不過還是很好奇大家平常怎設定 mypy 的限制,我是比較像 fastapi 的作法,strict = true 開下去然後把問題一一解掉,真的覺得要解掉的成本太高才會開始個別 overrides mypy 設定


最想知道的大概還是這兩個會不會開

no_site_packages = true
ignore_missing_imports = true

no_site_packages 一開下去,mypy 就會運行超~級~久,因為要檢查所有第三方庫,然後第三方庫沒寫 type hint 且又沒提供其他包解的話我才單獨 exclude 這些包不檢查。但儘管這些問題都解決了,最麻煩的感覺還是在 pre-commit 和 CI 上還要額外安裝其他正常的包 mypy 才能繼續正常檢查。

kyomind commented 2 months ago

@gbaian10 感覺你已經很有經驗了XD,比我的經驗還多!

我沒有開strict = True,除了比較嚴格,type hints 也要寫得比較詳細(比如容器一定要寫元素型別) 我自己可能還好,但我怕同事會覺得這樣很龜毛。還是需要考慮團隊整體的接受度

mypy 設定,我主要採用 django-stubs 專案提供的設定檔,裡面有些設定也屬於「strict = True」的範圍,所以算是部分採納