我正在尝试创建一个在预提交时运行pylint
的mercurial预提交钩子。我的项目使用虚拟环境。
我将钩子设置为在更改的文件上调用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
的各种变体,但都没有成功)。
编辑:如果我从我的.pylintrc
中删除common.blah/file.py
文件,它可以工作,所以我需要弄清楚如何import
它。我试着在PYTHONPATH
中添加“common”,但似乎不起作用。
发布于 2019-11-07 21:09:17
除非您正在编辑pylint的源代码,然后使用
sys.path.append('path/common')
不会有任何帮助,因为pylint没有评估你的源文件。即使它是,它也会在它试图加载你的插件之后发生,所以它已经失败了。
您需要通过设置PYTHONPATH
环境变量来添加路径,以便Pylint在运行时可以使用它。不要忘记,要添加的路径不是'path/common'
,而是'path/'
,因为它需要是common
包所在位置的路径,而不是包本身的路径。
发布于 2020-02-04 14:59:48
当我通过我的.pylintrc
向pylint添加一个插件时,我遇到了同样的问题
[MASTER]
load-plugins=path.to.my.plugin
这在我的机器上工作得很好,但给了我CircleCI上的ImportError
。解决方案(基于@lxop的答案)是在CircleCI上使用自定义PYTHONPATH
运行pylint:
PYTHONPATH=$(pwd) pylint
发布于 2019-10-31 09:38:37
显然,它是一个依赖项,您可以安装它来解决您的问题,您可以找到模块here
https://stackoverflow.com/questions/58452032
复制