提问: Python 的这几个代码分析工具和类型检查工具区别 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Davic1
V2EX    Python

提问: Python 的这几个代码分析工具和类型检查工具区别

  •  
  •   Davic1 2023-02-09 09:52:17 +08:00 4741 次点击
    这是一个创建于 974 天前的主题,其中的信息可能已经有所发展或是发生改变。
    帮助实现良好的代码风格的工具有很多:

    - [pyright/pylance]( https://github.com/microsoft/pyright)
    - [pylint]( https://github.com/PyCQA/pylint)
    - flake8
    - [black]( https://github.com/psf/black)

    black 很好理解, 是自动代码格式化的, 但是对于 pyright 和 pylint 的区别不是很理解。
    10 条回复    2024-02-14 13:36:44 +08:00
    Monad
        1
    Monad  
       2023-02-09 10:01:29 +08:00
    静态代码检查工具,通过 Type Hints 实现(部分)编译型语言在编译期的检查。
    类似的工具还有官方的 mypy 以及 google 的 pytype 。
    vicalloy
        2
    vicalloy  
       2023-02-09 10:14:57 +08:00   1
    我之前用 flake8 ,配置简单规则也够用。
    pylint 支持的规则最多,对我来说太复杂了。
    pyright/pylance 可能主要是性能方面的优化吧。

    我现在用 ruff ,规则够用,速度比 flake8 快很多。
    Davic1
        3
    Davic1  
    OP
       2023-02-09 10:23:42 +08:00
    @vicalloy 谢谢推荐, 也准备尝试一下 ruff 了~
    vicalloy
        4
    vicalloy  
       2023-02-09 10:30:37 +08:00   2
    pylance/pylint/flake8/ruff 是一类的,做代码规范化&错误检查
    pyright/mypy 一类,做类型检查
    pyright 据说比 mypy 快,不过这东西用 Typescript 写的,依赖 node 的运行环境。类型检查我还是用 mypy 。
    julyclyde
        5
    julyclyde  
       2023-02-09 11:34:46 +08:00
    @vicalloy 哈哈,没想到居然还有用外语来写这边的语法检查工具的情况
    NoOneNoBody
        6
    NoOneNoBody  
       2023-02-09 12:27:10 +08:00
    pylance ,vscode 内用的比较好,但它需要自启一个 server (?)
    个人觉得最好一点是鼠标划过可以提示__doc__,如果语法参数写在__doc__,可以直接就看到;不好是占较多内存,如果代码文件比较多、长,会有点卡顿

    pylint 规则复杂,我总是调不顺
    flake8 用在 sublime text ,比较简单,但查参数要打开 source 查看

    我个人脑子不好不记参数,代码复用时经常开多个文件 copy 并确认参数格式,本来 vscode+pylance 不错,只是 vscode 需要占用 GPU ,我较多状况是 20 核跑几十万条 pandas ,核显同时开着 vscode 会比较慢,就转到 sublime text 了
    ClericPy
        7
    ClericPy  
       2023-02-09 19:33:55 +08:00
    现在不都切换到 ruff 上了...
    wizardyhnr
        8
    wizardyhnr  
       2023-02-10 01:06:04 +08:00
    mypy 附带 mypyc ,过了类型检查附送一个编译成 c 的功能,类似 cython 。
    julyclyde
        9
    julyclyde  
       2023-02-22 13:11:22 +08:00
    @Monad mypy 并不是“官方的”吧?


    @vicalloy 我第一次运行 mypy 卡了好几十秒。后面就很快了,不懂是什么原理
    0attocs
        10
    0attocs  
       2024-02-14 13:36:44 +08:00
    @vicalloy #4 flake8 、pylint 、ruff 只是 linter ,pylance 是 static analyzer ,天壤之别。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1021 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 18:40 PVG 02:40 LAX 11:40 JFK 14:40
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86