ValueError: Key font.fantasy: Attempted relative import in non-package in Mercurial

ValueError: Key font.fantasy: Attempted relative import in non-package in Mercurial

我正在使用 mercurial,它在我的电脑上运行了很长时间。然而,当我今天使用它时,我收到以下错误消息:

** unknown exception encountered, please report by visiting
** https://mercurial-scm.org/wiki/BugTracker
** Python 2.7.12 (default, Jul  1 2016, 15:12:24) [GCC 5.4.0 20160609]
** Mercurial Distributed SCM (version 4.0.2)
** Extensions loaded: 
Traceback (most recent call last):
  File "/usr/local/bin/hg", line 45, in <module>
    mercurial.dispatch.run()
  File "/usr/local/lib/python2.7/dist-packages/mercurial/dispatch.py", line 60, in run
    sys.exit((dispatch(request(sys.argv[1:])) or 0) & 255)
  File "/usr/local/lib/python2.7/dist-packages/mercurial/dispatch.py", line 126, in dispatch
    ret = _runcatch(req)
  File "/usr/local/lib/python2.7/dist-packages/mercurial/dispatch.py", line 216, in _runcatch
    return callcatch(ui, _runcatchfunc)
  File "/usr/local/lib/python2.7/dist-packages/mercurial/dispatch.py", line 225, in callcatch
    return func()
  File "/usr/local/lib/python2.7/dist-packages/mercurial/dispatch.py", line 158, in _runcatchfunc
    'pdb' : pdb.set_trace
  File "/usr/local/lib/python2.7/dist-packages/mercurial/demandimport.py", line 152, in __getattribute__
    self._load()
  File "/usr/local/lib/python2.7/dist-packages/mercurial/demandimport.py", line 100, in _load
    mod = _hgextimport(_import, head, globals, locals, None, level)
  File "/usr/local/lib/python2.7/dist-packages/mercurial/demandimport.py", line 53, in _hgextimport
    return importfunc(name, globals, *args, **kwargs)
  File "/usr/local/bin/pdb.py", line 6, in <module>
    exec(compile(open(__file__).read(), __file__, 'exec'))
  File "/home/student/Documents/ven_python3/basekit/scripts/pdb.py", line 5, in <module>
    from basekit.utils.tool import parse_subargs
  File "/usr/local/lib/python2.7/dist-packages/mercurial/demandimport.py", line 260, in _demandimport
    mod = _hgextimport(_origimport, name, globals, locals)
  File "/usr/local/lib/python2.7/dist-packages/mercurial/demandimport.py", line 53, in _hgextimport
    return importfunc(name, globals, *args, **kwargs)
  File "/home/student/repos/basekit/basekit/__init__.py", line 4, in <module>
    matplotlib.use( "Agg" )
  File "/usr/local/lib/python2.7/dist-packages/mercurial/demandimport.py", line 152, in __getattribute__
    self._load()
  File "/usr/local/lib/python2.7/dist-packages/mercurial/demandimport.py", line 100, in _load
    mod = _hgextimport(_import, head, globals, locals, None, level)
  File "/usr/local/lib/python2.7/dist-packages/mercurial/demandimport.py", line 53, in _hgextimport
    return importfunc(name, globals, *args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/matplotlib-2.0.0b4-py2.7-linux-x86_64.egg/matplotlib/__init__.py", line 1170, in <module>
    rcParams = rc_params()
  File "/usr/local/lib/python2.7/dist-packages/matplotlib-2.0.0b4-py2.7-linux-x86_64.egg/matplotlib/__init__.py", line 1013, in rc_params
    return rc_params_from_file(fname, fail_on_error)
  File "/usr/local/lib/python2.7/dist-packages/matplotlib-2.0.0b4-py2.7-linux-x86_64.egg/matplotlib/__init__.py", line 1146, in rc_params_from_file
    if key not in _all_deprecated])
  File "/usr/local/lib/python2.7/dist-packages/matplotlib-2.0.0b4-py2.7-linux-x86_64.egg/matplotlib/__init__.py", line 897, in __init__
    self[k] = v
  File "/usr/local/lib/python2.7/dist-packages/matplotlib-2.0.0b4-py2.7-linux-x86_64.egg/matplotlib/__init__.py", line 916, in __setitem__
    raise ValueError("Key %s: %s" % (key, str(ve)))
ValueError: Key font.fantasy: Attempted relative import in non-package

我不确定我是如何导致此错误的,我在某些 python 不是 python2.7 而是 python3.5 的虚拟环境中安装了 mercurial。这可能是这个错误的原因吗? 但是,我从我的系统中删除了 mercurial 并重新安装了它。奇怪的是,如果我通过 pip 安装,我会收到上述错误消息。如果我使用 apt-get install 我会收到消息:

abort: couldn't find mercurial libraries in [/usr/bin

所以,我现在的问题是:如何让 mercurial 再次工作?

提前致谢。

如果你阅读回溯,你会看到它在 matplotlib 中失败了,这对我来说很奇怪:为什么 mercurial 需要 matplotlib?

谷歌搜索 "mercurial matplotlib" 我发现许多帖子都有与您类似的问题。事实证明,matplotlib 是 activity extension.

的依赖项

所以我认为解决方法是在您的 Mercurial 配置文件中禁用该扩展(hg config --edit 将在默认编辑器中打开配置文件)。然后找到以activity=开头的行,注释掉

如果你真的需要那个扩展,因为它没有随 mercurial 一起分发,你可能只需要将源更新到更新的版本(配置文件将指向包含克隆的目录扩展的 repo,然后你必须 hg pull -u 在该目录中),或者你可以 google 更多关于 "mercurial activity" 并查看状态是什么。

请注意,上面关于 Mercurial 不支持 Python 3 的评论具有误导性,因为您粘贴的输出显示它使用的是 Python 2.7.

编辑

使用 hg config --edit 编辑配置文件将失败,因为错误是在配置文件本身中触发的。

您可以直接编辑配置文件。从您粘贴的输出来看,您使用的是 Unix 系统,因此用户配置文件将为 $HOME/.hgrc.