如何配置Pylint仅检测*.py文件?
问题背景
我按以下步骤安装、配置并运行Pylint:
pip install pylint==2.15.3 pylint --generate-rcfile > pylintrc pylint ./*
但它对多个非Python文件(如pylintrc、pytest.ini、各类Markdown文件等)抛出语法错误,示例报错如下:
************* Module README
README.rst:1:6: E0001: Parsing failed: 'invalid syntax (, line 1)' (syntax-error)
************* Module pylintrc
pylintrc:6:1: E0001: Parsing failed: 'cannot assign to operator (, line 6)' (syntax-error)
************* Module pytest
pytest.ini:2:12: E0001: Parsing failed: 'invalid syntax (, line 2)' (syntax-error)
原本以为Pylint会自动仅关注*.py文件,尝试过在pylintrc的[MAIN]段配置ignore项(含/不含通配符)、ignored-modules项,以及命令行指定--ignore参数,均无效果。仅通过配置ignore-patterns有一定效果,但不确定是否为正确方式:
ignore-patterns=(^\.#)|(.*\.md)|(.*\.rst)|(pytest\.ini)
可行解决方案
1. 命令行直接指定Python文件
最直接的方式是在运行Pylint时,明确指定要检测的*.py文件,避免通配符匹配到其他类型文件:
# 检测当前目录下的所有Python文件 pylint ./*.py
如果需要递归检测所有子目录中的Python文件,可以使用递归通配符(部分shell需开启globstar支持,比如bash执行shopt -s globstar后生效):
pylint **/*.py
2. 通过pylintrc配置排除非Python文件
你之前使用ignore-patterns的方向是正确的,这也是官方推荐的排除非目标文件的方式。可以用更简洁的规则来排除所有非.py文件:
[MAIN] ignore-patterns=.*\.(?!py$).*$
或者明确列出需要排除的文件类型和特定文件,可读性更强:
[MAIN] ignore-patterns=.*\.(md|rst|ini)$|pylintrc
为什么之前的配置无效?
ignore参数:仅用于忽略具体目录或文件名,不支持通配符匹配批量文件,因此无法用它排除所有.md这类后缀的文件。ignored-modules:针对的是Python模块名(而非文件名),用来跳过特定模块的检测,不适合排除非Python文件。
内容的提问来源于stack exchange,提问作者davidpricedev

