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

Sad*_*dik 107 python graphviz python-2.7 pydot

当我用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')
Run Code Online (Sandbox Code Playgroud)

它打印出错误信息:

Couldn't import dot_parser, loading of dot files will not be possible.
Run Code Online (Sandbox Code Playgroud)

我正在使用python 2.7.3

Jon*_*han 220

回答pydot >= 1.1:

(上游)的不兼容性pydot已由6dff94b3f1修复,因此pydot >= 1.1将与之兼容pyparsing >= 1.5.7.


适用于pydot <= 1.0.28:

对于遇到此问题的任何其他人来说,这是由于从1.x到2.x版本的pyparsing的变化.要使用pip安装pydot,首先安装较旧版本的pyparsing:

pip install pyparsing==1.5.7
pip install pydot==1.0.28
Run Code Online (Sandbox Code Playgroud)

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

  • 为什么不只是`pip install pyparsing == 1.5.7`? (45认同)

Dan*_*ane 57

pip repo中有一个名为pydot2的新软件包,可以正常运行pyparsing2.我无法降级我的包,因为matplotlib依赖于较新的pyparsing包.

注意:来自macports的python2.7

  • 恕我直言这个答案应该考虑在pyparsing降级的想法.同样适合我使用networkx.谢谢 ! (7认同)

Gab*_*var 21

pydot使用了pyparsing的私有模块变量(_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:
Run Code Online (Sandbox Code Playgroud)

  • 为了完整性,[这里是问题报告](http://code.google.com/p/pydot/issues/detail?id=81#c9)pydot报告了这个问题和@Gabi Davar提到的修复. (2认同)

dav*_*lla 7

我分叉了pydot存储库[1],应用了Gabi Davar补丁和一些更改来支持python-3.该包可在PyPI [2]中找到.

干杯

  • 链接https://pypi.python.org/pypi/pydot2已损坏,但`pip install pydot2`正常工作,此链接https://pypi.python.org/pypi/pydot2/1.0.32正常运行. (2认同)

小智 6

$ sudo pip uninstall pydot

$ sudo pip install pydot2

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


Sad*_*dik 5

解决方案不是从某个地方安装pydot,而是从官方的ubuntu存储库安装"python-pydot".

  • 不是用pip,`sudo apt-get install python-pydot`为我做了. (5认同)