ValueError:Key font.fantasy:在Mercurial中的非包中尝试相对导入

时间:2017-01-10 14:44:10

标签: python python-3.x 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

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

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

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

提前致谢。

1 个答案:

答案 0 :(得分:1)

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

Google搜索“mercurial matplotlib”我发现各种帖子都有类似于你的问题。事实证明,matplotlib是activity extension的依赖关系。

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

如果你确实需要这个扩展,因为它不是与mercurial一起分发的,你可能只需要将源更新为更新的版本(配置文件将指向包含repo克隆的目录)扩展程序,然后您必须在该目录中hg pull -u,或者您可以更多地了解“mercurial活动”并查看状态。

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

修改

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

您可以直接编辑配置文件。根据您粘贴的输出,您在Unix系统上,因此用户配置文件将为$HOME/.hgrc