15

我的项目结构如下所示:

project/
   app/
      main.py
   venv/
   .pylintrc
   .pre-commit-config.yaml

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

Unable to import 'psycopg2' (import-error)

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

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

-   repo: https://github.com/PyCQA/pylint
    rev: pylint-2.4.2
    hooks:
    -   id: pylint
4

2 回答 2

22

不确定这是否适合 pylint 但在pre-commit/mirrors-pylint的底部有免责声明

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

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


免责声明:我是pre-commit

于 2020-04-15T21:03:35.180 回答
-2

我过去使用的一种解决方法是强制预先提交以安装当前项目。请注意,虽然 pre-commit 的作者不以任何方式支持这项工作,但实际上被积极劝阻,主要是因为它阻止了 pre-commit 使用不可变缓存。

一旦创建了 virtualenv,它将不会再次更新,并且 pre-commit 没有任何命令行选项来告诉不信任本地缓存。如果您遇到错误,您唯一的选择是重置整个预提交磁盘缓存,这可能意味着~/.cache./pre-commit在您运行pre-commit clean. 这样做会减慢您在所有其他项目上运行预提交的速度...... :(

理想情况下,该工具应该可以选择仅使当前项目中的环境无效,而不是整个缓存。

- repo: https://github.com/pre-commit/mirrors-pylint
  rev: v3.0.0a3
  hooks:
  - id: pylint
    additional_dependencies:
    - .  # <-- that makes it install current project
    - flaky
于 2021-06-29T08:34:01.097 回答