我正在使用pylint 1.6.4和git-pylint-commit-hook 2.1.1来提交我提交的文件。我还使用alembic生成迁移,它们存储在<project-root>/migrations/versions
。
问题是生成的迁移无效,pylint会为它们生成警告。我可以使用--ignore = migrations忽略迁移。 (无论如何,Pylint默认忽略它们,因为迁移不是python模块,它只是一个目录)。但是git-pylint-commit-hook调用pylint和要更改的已更改文件列表。如果你给它一个文件名列表而不是模块,pylint不会检查文件是否应该被忽略。
当要提交新的迁移时,这会导致预提交挂钩失败。
Running pylint on migrations/versions/d1f0e08ea6d2_skill_table.py (file 2/13).. 8.6/10.00 FAILED
************* Module d1f0e08ea6d2_skill_table.py
C: 5, 0: Trailing whitespace (trailing-whitespace)
C: 1, 0: Invalid module name "d1f0e08ea6d2_skill_table" (invalid-name)
C: 16, 0: Import "from alembic import op" should be placed at the top of the module (wrong-import-position)
C: 17, 0: Import "import sqlalchemy as sa" should be placed at the top of the module (wrong-import-position)
C: 20, 0: Missing function docstring (missing-docstring)
C:171, 0: Missing function docstring (missing-docstring)
我尝试将#pylint: skip-file
添加到每个迁移文件的开头。这会跳过该文件,但会生成并跳过该文件的错误:
Running pylint on migrations/versions/d1f0e08ea6d2_skill_table.py (file 2/13).. 0/10.00 FAILED
************* Module d1f0e08ea6d2_skill_table.py
I: 1, 0: Ignoring entire file (file-ignored)
所以我试图忽略.pylintrc中的错误file-ignored
,如下所示:
[messages control]
disable=unused-argument
它的工作原理并且不再报告错误,但是预提交挂钩失败,因为它没有找到任何语句:
Running pylint on migrations/versions/d1f0e08ea6d2_skill_table.py (file 2/13).. 0/10.00 FAILED
Report
======
0 statements analysed.
请注意,在这两种情况下,pylint都会将文件评估为0.0 / 10.0,因此设置较低的失败阈值不是解决方案。
问题是,如何让git-pylint-commit-hook和pylint忽略我的迁移?
答案 0 :(得分:0)
这是一个古老的问题,但我本人只是遇到了这个问题。我在搜索this线程时找到了答案。
要解决此问题,只需添加exclude
指令和与您的文件夹匹配的正则表达式即可。
例如,如果要排除迁移文件夹,只需添加:
exclude: ^tests/
转到您的Pylint设置。我的看起来像这样:
- repo: local
hooks:
- id: system
name: PyLint
entry: poetry run pylint
language: system
exclude: ^alembic/
files: \.py$