【发布时间】:2020-02-15 12:29:31
【问题描述】:
我正在尝试创建一个在预提交上运行 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 running:
sys.path.append('path/common')
但错误仍然存在。我该如何解决这个问题,以便它可以加载我的插件? (我也尝试过将公共模块添加到PYTHONPATH 的变体,但没有成功)。
编辑:如果我从.pylintrc 中删除common.blah/file.py 文件,它可以工作,所以我需要弄清楚如何import 它。我尝试在PYTHONPATH 中添加“common”,但似乎不起作用。
【问题讨论】:
-
sys.path.append('path/common')是在哪里做的?您是否尝试过实际使用 PYTHONPATH 环境变量? -
@lxop 我在导入后在文件开头执行 sys.path.append。我还没有尝试将它实际添加到 PYTHONPATH。
-
在哪个文件的开头?如果它是您正在 linting 的文件,那么它将无济于事,因为它实际上并没有被评估。您需要在 PYTHONPATH 环境变量中设置它
-
你能展示你完整的钩子吗?
标签: python mercurial pylint mercurial-hook