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

Posted

技术标签:

【中文标题】pydot 和 graphviz 错误:无法导入 dot_parser,无法加载 dot 文件【英文标题】:pydot and graphviz error: Couldn't import dot_parser, loading of dot files will not be possible 【发布时间】:2013-04-03 19:45:23 【问题描述】:

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

【问题讨论】:

pip install pydot2 应该可以解决这个问题。比使用pip uninstall 好得多,因为如果您共享代码,您只需将 pydot2 添加到您的 requirements.txt 中,而不会让用户运行不熟悉的命令。 【参考方案1】:

pydot >= 1.1的答案:

(上游)pydot 的不兼容问题已由6dff94b3f1 修复,因此pydot >= 1.1 将是compatible with 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

如果您没有使用pip 安装pyparsing,而是使用setup.py,那么请查看此solution 来卸载软件包。谢谢@qtips。

【讨论】:

我安装了 NetworkX、GraphViz 和 pydot,但无法让 Graphviz 功能与 NetworkX 一起使用(例如,this NetworkX 示例失败)。我不断收到:未定义全局名称“dot_parser”。您的解决方案解决了这个问题。 另外,如果您使用python setup.py install 安装了您的软件包,sudo pip uninstall 将不起作用,在这种情况下,请遵循this 解决方案。至少在我的 Mountain Lion OSX Mac 上是这样 sudo 显然并不总是必要的,就像您使用的是 virtualenv 一样。除此之外,这对我有用! 在 Ubuntu 12.04 中,通过解析安装时出现此错误:“请求 pyparsing==1.5.7,但安装版本 2.0.1”。然后还是出现上面的错误所以解决方法是指定python egg的下载位置:sudo pip install -Iv pypi.python.org/packages/source/p/pyparsing/… 为什么不直接pip install pyparsing==1.5.7【参考方案2】:

在 pip repo 中有一个名为 pydot2 的新包,它可以与 pyparsing2 一起正常工作。我无法降级我的包,因为 matplotlib 依赖于较新的 pyparsing 包。

注意:来自 macports 的 python2.7

【讨论】:

恕我直言,这个答案应该在 pyparsing 降级理念上考虑。对我来说也非常适合networkx。谢谢! 仍然出现此错误,但 dot_parser 错误消失了。您必须安装 pydot 才能使 pydotprint 工作。【参考方案3】:

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:

【讨论】:

为了完整起见,here's the issue report 用于报告此问题的 pydot 以及@Gabi Davar 提到的修复。【参考方案4】:

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

干杯

[1]https://pypi.python.org/pypi/pydot2/1.0.32 [2]https://pypi.python.org/pypi/pydot2

【讨论】:

PyPI 页面似乎已关闭。这太糟糕了!任何想法为什么? pip 包好像坏了。 pip install... 在没有明确错误的情况下在中间失败。看起来清单和实际文件不匹配。我检查了 git repo,然后是 mv README.rst README 然后是 python setup.py install。这对我有用:-) 链接 pypi.python.org/pypi/pydot2 已损坏,但 pip install pydot2 有效,此链接 pypi.python.org/pypi/pydot2/1.0.32 有效。【参考方案5】:

$ sudo pip uninstall pydot

$ sudo pip install pydot2

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

【讨论】:

我反之亦然pip uninstall pydot2 然后pip install pydot 来修复错误。这是正确答案的链接:github.com/pydot/pydot/issues/166#issuecomment-356066120【参考方案6】:

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

【讨论】:

截至 2013 年 8 月 25 日 pip install python-pydot 对我不起作用(未找到分发); pip install pydot 确实如此。所以我不认为pydot 一定是非官方的。也许您是通过操作系统发行版安装的? 不是 pip,sudo apt-get install python-pydot 为我做了。 这可能会起作用,因为 Ubuntu 目前在 1.5.2 有 python-pyparsing,这避免了上面列出的版本不兼容。我使用了上面的修复程序,从那以后就没有问题了。谢谢! 不幸的是,在 Ubuntu 中,从 Saucy 开始,pyparsing 已升级,但 pydot 尚未适当修补。 我已经提交了修复 Ubuntu 软件包的请求:bugs.launchpad.net/ubuntu/+source/pydot/+bug/1321135【参考方案7】:

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

PyDotPlus by Carlos Jenkins 带有漂亮的 travis buildbot 和精美的 documentation。但是,您需要将其文件夹名称从 site-packages\pydotplus 更改为 site-packages\pydot 才能与导入 pydot 的现有程序一起使用。 pydot3kbmcorser。 很遗憾,没用! prologic/pydot James Mills 从官方 pydot Google 代码页链接到...

Python 3 兼容性的分支

这里是 David Villa 的 pydot2 的工作链接,可以正常工作: https://pypi.python.org/pypi/pydot2/1.0.32

【讨论】:

【参考方案8】:

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

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

【讨论】:

【参考方案9】:

在我在这里看到的这么多尝试之后,我最后做了什么(它适用于 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'
#

【讨论】:

【参考方案10】:

这对我有用(Mac OS X 10.9 和 Anaconda 上的 Python 2.7.10):

conda uninstall pydot

那么,

conda install pydot

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

【讨论】:

【参考方案11】:

在 OSX Mavericks 上,以下方法成功了……我遇到了同样的错误,但在底部还有一个抱怨,即 graphviz 可执行文件不存在……我认为问题是我在之前安装了 graphviz其他模块?

brew uninstall graphviz
brew install graphviz

【讨论】:

【参考方案12】:

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

此示例来自 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 上是多余的,上面的调用不起作用。

【讨论】:

【参考方案13】:

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

【讨论】:

【参考方案14】:

您需要将 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__

【讨论】:

以上是关于pydot 和 graphviz 错误:无法导入 dot_parser,无法加载 dot 文件的主要内容,如果未能解决你的问题,请参考以下文章

ImportError: 无法导入 pydot。您必须安装 pydot 和 graphviz 才能使 `pydotprint` 工作

keras绘图之pydot和graphviz的导入( pydot` failed to call GraphViz)

无法让 pydot 在 Windows 10 上找到 graphviz

如何在 google colab 上安装 pydot 和 graphviz?

pydot.InvocationException:未找到 GraphViz 的可执行文件

在 Anaconda 环境中安装 pydot 和 graphviz 包