Pylint не удалось загрузить плагин на Mercurial Precommit Hook - PullRequest
6 голосов
/ 18 октября 2019

Я пытаюсь создать mercurial pre-commit hook, который запускает pylint на pre-commit. Мой проект использует виртуальную среду.

У меня настроен хук для вызова pylint для измененных файлов, но я получаю сообщение об ошибке:

Traceback (most recent call last):
    File "/home/barmstrong/.virtualenvs/amp/bin/pylint", line 10, in <module>
        sys.exit(run_pylint())
      File "/home/barmstrong/.virtualenvs/amp/lib/python3.6/site-packages/pylint/__init__.py", line 20, in run_pylint
        Run(sys.argv[1:])
      File "/home/barmstrong/.virtualenvs/amp/lib/python3.6/site-packages/pylint/lint.py", line 1583, in __init__
        linter.load_plugin_modules(plugins)
      File "/home/barmstrong/.virtualenvs/amp/lib/python3.6/site-packages/pylint/lint.py", line 636, in load_plugin_modules
        module = modutils.load_module_from_name(modname)
      File "/home/barmstrong/.virtualenvs/amp/lib/python3.6/site-packages/astroid/modutils.py", line 202, in load_module_from_name
        return load_module_from_modpath(dotted_name.split("."), path, use_sys)
      File "/home/barmstrong/.virtualenvs/amp/lib/python3.6/site-packages/astroid/modutils.py", line 244, in load_module_from_modpath
        mp_file, mp_filename, mp_desc = imp.find_module(part, path)
      File "/usr/lib/python3.6/imp.py", line 297, in find_module
        raise ImportError(_ERR_MSG.format(name), name=name)
    ImportError: No module named 'common'

Я полагаю, что это связано сПользовательский плагин в файле .pylintrc, который он пытается загрузить из каталога моего проекта в:

'/common/blah/file.py'

А в .pylintrc на него ссылаются:

common.blah.file

Я пытаюсьчтобы добавить это к PYTHONPATH работает:

sys.path.append('path/common')

Но ошибка не устранена. Как мне решить эту проблему, чтобы он мог загрузить мой плагин? (Я также пробовал варианты добавления общего модуля к PYTHONPATH, но безуспешно).

РЕДАКТИРОВАТЬ: если я удаляю файл common.blah/file.py из моего .pylintrc, он работает, поэтому мне нужно выяснить,как я могу import это. Я попытался добавить 'common' к PYTHONPATH, но, похоже, он не работает.

Ответы [ 2 ]

0 голосов
/ 08 ноября 2019

Если вы не редактируете источник pylint, то наличие

sys.path.append('path/common')

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

Вам нужно будет добавить путь, установив переменную окружения PYTHONPATH, чтобы он был доступенПилинту, когда он бежит. Не забывайте, что путь для добавления - это не 'path/common', а 'path/', поскольку он должен быть путем к месту, в котором находится пакет common, а не путем к самому пакету.

0 голосов
/ 31 октября 2019

Очевидно, это зависимость, которую вы можете установить, чтобы решить вашу проблему, вы можете найти модуль здесь

...