хук pylint и pre-commit не может импортировать

Структура моего проекта выглядит так:

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

Когда я пытаюсь редактировать project/app/main.py и это терпит неудачу с Unable to import 'psycopg2' (import-error)

Но когда я пытаюсь напрямую использовать этот файл, он работает.

.pre-commit-config.yaml выглядит так:

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

3 ответа

Не уверен, что это сделало его правильным pylint, но в нижней части https://github.com/pre-commit/mirrors-pylint есть отказ от ответственности

pre-commit запускает pylint из изолированного virtualenv. Многие проверки pylint выполняют динамический анализ, который там не дает. Вы можете найти настройку pylint как localкрючок полезнее.

если у вас очень мало зависимостей, additional_dependencies может быть достаточно, чтобы заставить его работать, но использование local крючки для вещей, которые должны (~ по существу) импортировать ваш код, вероятно, ваш лучший выбор


отказ от ответственности: я автор pre-commit

Вы можете отключить ошибку импорта в аргументах pylint. Это не должно конфликтовать с другими типами:

      - repo: https://github.com/pycqa/pylint
  rev: v2.17.5
  hooks:
    - id: pylint
      args: [src, --disable=import-error]

Один из способов обхода, который я использовал в прошлом, заключался в принудительной предварительной фиксации для установки текущего проекта. Имейте в виду, что, хотя эта работа никоим образом не поддерживается автором предварительной фиксации, на самом деле она активно обескураживается, главным образом потому, что она не позволяет предварительной фиксации использовать неизменяемые кеши.

После создания virtualenv он больше не будет обновляться, а предварительная фиксация не имеет параметров командной строки, чтобы не доверять локальному кешу. Если вы столкнетесь с ошибками, ваш единственный вариант - сбросить весь дисковый кеш перед фиксацией, это, вероятно, означает удаление гигабайт данных из когда ты бежишь . Это замедлит выполнение предварительной фиксации во всех других ваших проектах ... :(

В идеале инструмент должен иметь возможность аннулировать только среды из текущего проекта, а не весь кеш.

      - repo: https://github.com/pre-commit/mirrors-pylint
  rev: v3.0.0a3
  hooks:
  - id: pylint
    additional_dependencies:
    - .  # <-- that makes it install current project
    - flaky
Другие вопросы по тегам