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


107

当我使用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


6
pip install pydot2应该解决这个问题。比起使用它要好得多,pip uninstall因为如果您共享代码,则只需将pydot2添加到您的requirements.txt中,而不必让用户运行不熟悉的命令。
RussellStewart

Answers:


220

回答pydot >= 1.1

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


答案适用于pydot <= 1.0.28

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

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

如果您不是pyparsing使用进行安装pip,而是使用进行了安装,请setup.py查看此解决方案以卸载该软件包。谢谢@qtips。


1
我安装了NetworkX,GraphViz和pydot,但无法获得Graphviz功能与NetworkX一起使用(例如, NetworkX示例失败)。我不断得到:全局名称'dot_parser'未定义。您的解决方案解决了这个问题。
13年

1
同样,sudo pip uninstall如果python setup.py install在这种情况下使用了安装包,则无法使用,请按照以下解决方案进行操作。至少我的Mountain Lion OSX Mac上就是这种情况
qtips 2013年

sudo显然并非总是必需的,例如您使用的是virtualenv。除此之外,这对我有用!
大卫·雷诺兹

在Ubuntu 12.04中,通过parsing安装时出现此错误:“ Requested pyparsing == 1.5.7,但安装版本2.0.1”。然后上面的错误发生时还是那么的解决方案是指定蟒蛇蛋的下载地点:sudo的PIP安装-Iv pypi.python.org/packages/source/p/pyparsing/...
lefterav

45
为什么不只是pip install pyparsing==1.5.7呢?
2014年

57

pip存储库中有一个名为pydot2的新程序包,可与pyparsing2一起正常运行。我无法降级我的软件包,因为matplotlib依赖于较新的pyparsing软件包。

注意:来自Macports的python2.7


7
恕我直言,应该在pyparsing降级思路上考虑此答案。也可以与networkx完美配合。谢谢 !
拉格夫房车

仍然出现此错误,但dot_parser错误消失了。您必须安装pydot pydotprint才能工作。
Inanc Gumus 2014年

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:

2
为了完整起见,这是pydot 的问题报告,其中报告了此问题以及@Gabi Davar提到的修复程序。
杰克·凯利

7

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

干杯


1
PyPI页面似乎已关闭。这太糟糕了!有什么想法吗?
达夫·克拉克

点子包似乎坏了。pip install...中间失败,没有显式错误。清单和实际文件看起来不匹配。我签出git repo,mv README.rst README然后python setup.py install。这对我有用:-)
野口健二2014年

2
链接pypi.python.org/pypi/pydot2断开但pip install pydot2有效,该链接pypi.python.org/pypi/pydot2/1.0.32可用
Mark Mikofski 2015年


5

解决方案不是从某个地方安装pydot,而是从官方ubuntu存储库安装“ python-pydot”。


截至2013年8月25日,此pip install python-pydot功能对我不起作用(找不到分布);pip install pydot做。因此,我认为这pydot不一定非官方。也许您是通过OS发行版安装的?
Owen S.

5
不带点子,sudo apt-get install python-pydot对我有用。
Sadik

这可能会起作用,因为Ubuntu当前python-pyparsing为1.5.2,从而避免了上面列出的版本不兼容。我进行了上述修复,此后再也没有出现过问题。谢谢!
Owen S.

1
不幸的是,自从Saucy起,在Ubuntu中pyparsing已升级,但pydot尚未得到适当的修补。
2014年

1
我已提交了修复Ubuntu软件包的票证:bugs.launchpad.net/ubuntu/+source/pydot/+bug/1321135
Tully

3

现在至少有2个版本似乎支持PyParsing-2和Python-3:


3

我又遇到了问题,上述解决方案不起作用。如果这对您来说是正确的,并且您还正在Mac Cap和El Capitan上使用Anaconda,请尝试以下操作:

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

3

经过多次尝试后,最后我做了什么(伪序列使其适用于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'
#

2

这对我有用(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。


1

在OSX Mavericks上,以下技巧可以解决问题:我遇到了相同的错误,但是在底部,还抱怨没有graphviz可执行文件...我认为问题是我在其他模块之前安装了graphviz吗?

brew uninstall graphviz
brew install graphviz

1

当其他解决方案不起作用时,这是解决探针的一种快速而肮脏的方法:

这个例子来自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上是多余的,并且上述调用不起作用。


1

我也遇到了这个问题,而我的pydot == 1.0.28而pyparsing == 2.2.0。我通过从Google下载最新的pydot 1.2.3(tar.gz)解决了问题,然后离线安装了它。当我在ubuntu 14.04中更新pydot时,它说pydot 1.0.28是最新版本。因此,我从谷歌下载1.2.3版本。


0

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

对于使用Conda的Win-64,这对我有用:

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

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

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

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

print pyparsing.__version__
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.