pydot和graphviz错误:无法导入dot_parser,将无法加载点文件

当我用pydot运行一个非常简单的代码

import pydot graph = pydot.Dot(graph_type='graph') for i in range(3): edge = pydot.Edge("king", "lord%d" % i) graph.add_edge(edge) vassal_num = 0 for i in range(3): for j in range(2): edge = pydot.Edge("lord%d" % i, "vassal%d" % vassal_num) graph.add_edge(edge) vassal_num += 1 graph.write_png('example1_graph.png') 

它打印出错误信息:

 Couldn't import dot_parser, loading of dot files will not be possible. 

我正在使用python 2.7.3

回答pydot >= 1.1

(上游) pydot的不兼容已被pydot固定,因此pydot >= 1.1将与pyparsing >= 1.5.7兼容 。


适用于pydot <= 1.0.28答案:

对于遇到这个问题的其他人来说,这是由于从1.x版本到2.x版本的变化所致。 要使用pip安装pydot,请先安装较早版本的pyparsing:

 pip install pyparsing==1.5.7 pip install pydot==1.0.28 

如果你没有使用pip安装pyparsing ,而是使用setup.py ,那么看看这个解决scheme来卸载软件包。 谢谢@qtips。

在pip repo中有一个名为pydot2的新程序包,可以正确使用pyparsing2。 我无法降级我的包,因为matplotlib依赖于新的pyparsing包。

注意:来自macports的python2.7

pydot使用pyparsing中的私有模块variables(_noncomma)。 下面的差异修复它用于pyparsing 2.0.1:

 diff --git a/dot_parser.py b/dot_parser.py index dedd61a..138d152 100644 --- a/dot_parser.py +++ b/dot_parser.py @@ -25,8 +25,9 @@ from pyparsing import __version__ as pyparsing_version from pyparsing import ( nestedExpr, Literal, CaselessLiteral, Word, Upcase, OneOrMore, ZeroOrMore, Forward, NotAny, delimitedList, oneOf, Group, Optional, Combine, alphas, nums, restOfLine, cStyleComment, nums, alphanums, printables, empty, quotedString, - ParseException, ParseResults, CharsNotIn, _noncomma, dblQuotedString, QuotedString, ParserElement ) + ParseException, ParseResults, CharsNotIn, dblQuotedString, QuotedString, ParserElement ) +_noncomma = "".join( [ c for c in printables if c != "," ] ) class P_AttrList: 

我分叉pydot存储库[1],应用了Gabi Davar补丁和一些更改以支持python-3。 该软件包可在PyPI [2]中find。

干杯

$ sudo pip uninstall pydot

$ sudo pip install pydot2

请参阅以下链接: http : //infidea.net/troubleshooting-couldnt-import-dot_parser-loading-of-dot-files-will-not-be-possible/

解决的办法不是从某个地方安装pydot,而是从官方ubuntu软件仓库中安装“python-pydot”。

现在至less有两个版本支持PyParsing-2和Python-3:

  • 由卡洛斯jenkins PyDotPlus与一个不错的特拉维斯buildbot和花哨的文档 。 但是,您需要将其文件夹名称从site-packages\pydotplussite-packages\pydot ,以便与导入pydot的现有程序一起使用。
  • 由bmcorser提供的pydot3k 。 可悲的是,没有工作!
  • prologic / pydot由詹姆斯·米尔斯链接到官方pydot谷歌代码页作为…

Python 3兼容的分支

  • 这里是大卫别墅的pydot2工作正常的工作链接: https ://pypi.python.org/pypi/pydot2/1.0.32
  • 我再次遇到了问题,我的上述解决scheme无法正常工作。 如果对你来说这是真的,你也在El Capitan的Mac上使用Anaconda,试试这个:

     conda install --channel https://conda.anaconda.org/RMG graphviz` conda install --channel https://conda.anaconda.org/RMG pydot 

    这对我来说(在Anaconda上使用Python 2.7.10的Mac OS X 10.9):

     conda uninstall pydot 

    然后,

     conda install pydot 

    在pydot安装后,Pyparsing会降级(从2.x降到1.5.7)。 未来的Google员工:这允许我正确地安装和导入Theano。

    在OSX小牛下面的伎俩…我得到了同样的错误,但在底部也有一个投诉graphviz可执行文件不存在…我认为问题是我已经安装graphviz之前的其他模块?

     brew uninstall graphviz brew install graphviz 

    当其他解决scheme不起作用时,这是解决问题的一种快速和肮脏的方法:

    这个例子来自Ubuntu 16.04上的python 2.7。

    编辑文件python2.7 / site-packages / keras / utils / visualize_util.py并注释下面的代码段。

     if not pydot.find_graphviz(): raise ImportError('Failed to import pydot. You must install pydot' ' and graphviz for `pydotprint` to work.') 

    find_graphviz()在新版本的pydot上是多余的,上面的调用不起作用。

    我在这里看到的这么多尝试之后做了什么(对于networkx来说是伪序列):

     apt-get remove python-pydot pip install pydotplus apt-get install libcgraph6 apt-get install python-pygraphviz # pip freeze | grep pydot pydotplus==2.0.2 # pip freeze | grep pyparsing pyparsing==2.2.0 # pip freeze | grep graphviz pygraphviz==1.2 # python -c 'import pydotplus' # 

    您需要将pyparsing从版本2.x降级到版本1.5.7,以使pydot正常工作。

    对于win-64,使用Conda,这为我工作:

     conda install -c https://conda.anaconda.org/Trentonoliphant pyparsing=1.5.7 

    然后,我禁用/卸载2.x版本,并重新加载pyparsing在我的脚本中:

     pyparsing = reload(pyparsing) pydot = reload(pydot) 

    要检查您是否运行了正确的版本:

     print pyparsing.__version__