python - Pylint 无法在 mercurial 预提交 Hook 上加载插件

标签 python mercurial pylint mercurial-hook

我正在尝试创建一个运行 pylint 的 mercurial 预提交 Hook 在预提交上。我的项目使用虚拟环境。

我已设置好调用 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')

但错误仍然存​​在。我该如何解决这个问题,以便它可以加载我的插件? (我也尝试了将公共(public)模块添加到 PYTHONPATH 的变体,但没有成功)。

编辑:如果我删除 common.blah/file.py来自我的 .pylintrc 的文件它有效,所以我需要弄清楚如何import它。我尝试在 PYTHONPATH 中添加 'common'但它似乎不起作用。

最佳答案

除非你正在编辑 pylint 的源代码,否则有

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

根本没有帮助,因为 pylint 没有评估您的源文件。即使是这样,它也会在它尝试加载你的插件之后发生,所以它已经失败了。

您需要通过设置 PYTHONPATH 添加路径环境变量,以便 Pylint 在运行时可以使用它。不要忘记要添加的路径不是'path/common'但是 'path/' ,因为它必须是 common 所在的路径包的生命,而不是包本身的路径。

关于python - Pylint 无法在 mercurial 预提交 Hook 上加载插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58452032/

相关文章:

python - Pyramid 架构迁移

python - 作为Docker镜像运行后,聊天机器人对话的CLI不再出现

version-control - 管理具有多个头的存储库有什么缺点?

python - Pylint - Pylint 无法导入 flask.ext.wtf?

python - 用列的顺序替换 Pandas 数据框中的值

python - 舍入小数的问题(python)

windows - 在 Windows 上升级到 Mercurial 更高版本 : Cannot clone a repo: get abort message because cannot find web. cacerts

linux - 使用 mercurial 设置文件所有权

python - pylint 在 PyQt4 中找不到 QtCore

python - git-pylint-commit-hook 不检查所有项目文件