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\pydotplus
为site-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__