pylint 和预提交钩子无法导入

pal*_*kan 13 pylint pre-commit pre-commit-hook pre-commit.com

我的项目结构如下所示:

project/
   app/
      main.py
   venv/
   .pylintrc
   .pre-commit-config.yaml
Run Code Online (Sandbox Code Playgroud)

当我尝试编辑project/app/main.py但失败时

Unable to import 'psycopg2' (import-error)
Run Code Online (Sandbox Code Playgroud)

但是当我试图直接对这个文件进行 pylint 时,它可以工作。

.pre-commit-config.yaml 看起来像这样:

-   repo: https://github.com/PyCQA/pylint
    rev: pylint-2.4.2
    hooks:
    -   id: pylint
Run Code Online (Sandbox Code Playgroud)

Ant*_*ile 18

不确定这是否使它成为正确的 pylint,但在pre-commit/mirrors-pylint的底部有一个免责声明

pre-commit 从隔离的 virtualenv 运行 pylint。许多 pylint 的检查会执行动态分析,但会在那里失败。您可能会发现将 pylint 配置为local钩子更有用。

如果您的依赖项很少,则additional_dependencies可能足以使其工作,但是local对于需要(~基本上)导入代码的事情使用钩子可能是您最好的选择


免责声明:我是作者 pre-commit

  • flake8 不需要您安装的依赖项——并且通过显式列出您键入的依赖项来让 mypy 工作相当容易。我个人不使用 pylint 所以我没有任何经验 (2认同)