Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pydot和graphviz错误:无法';t导入dot_解析器,将无法加载点文件_Python_Python 2.7_Graphviz_Pydot - Fatal编程技术网

Python pydot和graphviz错误:无法';t导入dot_解析器,将无法加载点文件

Python pydot和graphviz错误:无法';t导入dot_解析器,将无法加载点文件,python,python-2.7,graphviz,pydot,Python,Python 2.7,Graphviz,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,

当我用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,而是从官方ubuntu存储库安装“python pydot”。

回答
pydot>=1.1

(上游)
pydot
的不兼容性已由修复,因此将修改
pydot>=1.1



答案适用于
pydotpydot使用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:

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

干杯

  • [1]
  • [2]

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


      注意:来自macports的python2.7在OSX小牛上实现了以下功能。。。我得到了同样的错误,但在底部还有一个投诉,即graphviz可执行文件不存在。。。我想问题是我在安装其他模块之前安装了graphviz

      brew uninstall graphviz
      brew install graphviz
      

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

      • 一个漂亮的特拉维斯机器人和幻想。但是,您需要将其文件夹名称从
        site packages\pydotplus
        更改为
        site packages\pydot
        ,以便它与导入pydot的现有程序一起工作
      • 遗憾的是,它不起作用
      • 由James Mills从官方pydot谷歌代码页链接到

        Python3兼容性的一个分支
      • 下面是David Villa的pydot2的工作链接,它工作正常:


      $sudo pip卸载pydot

      $sudo pip安装pydot2

      请参阅以下链接:

      这对我来说很有效(在Anaconda上使用Mac OS X 10.9和Python 2.7.10):

      那么


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

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

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

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

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

      这个例子来自Ubuntu 16.04上的Python2.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起作用的伪序列):


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

      我安装了NetworkX、GraphViz和pydot,但无法使GraphViz功能与NetworkX配合使用(例如,NetworkX示例失败)。我不断得到:全局名称“dot_parser”没有定义。您的解决方案解决了此问题。此外,如果您使用
      python setup.py install安装了软件包,那么
      sudo pip uninstall
      也不起作用。在这种情况下,请遵循解决方案。这至少在我的山狮OSX上是这样的Mac
      sudo
      显然并不总是必要的,就像你在使用virtualenv一样。除此之外,这对我很有用!在Ubuntu12.04中,我在安装byparsing时遇到了这个错误:“请求的pyparsing==1.5.7,但安装的是版本2.0.1”。然后,上面的错误仍然发生,因此解决方案是指定python egg的下载位置:sudo pip install-Iv为什么不
      pip install pyparsing==1.5.7
      ?截至2013年8月25日
      pip install python pydot
      对我不起作用(未找到发行版)
      pip安装pydot
      does。所以我不认为pydot不一定是非官方的。也许你是通过操作系统发行版安装的?不是pip,
      sudo-apt-get-install-python-pydot
      为我做的。这可能会起作用,因为Ubuntu目前在1.5.2版本中有
      python-python-parsing
      ,这避免了上面列出的版本不兼容。我使用了上面的修复程序,从那以后就再也没有问题了。谢谢不幸的是,在Ubuntu中,Saucy pyparsing已经升级,但是pydot没有得到适当的修补。我已经提交了一张修复Ubuntu包的罚单:为了完整性,pydot报告了这个问题以及@Gabi Davar.IMHO提到的修复,这个答案应该在pyparsing降级的想法上考虑。networkx也非常适合我。谢谢仍然给出此错误,但dot_解析器错误消失。您必须为
      pydotprint
      安装pydot才能工作。PyPI页面似乎已关闭。那太糟糕了!你知道为什么吗?pip软件包好像坏了<代码> PIP安装…<代码>失败,中间没有显式错误。看起来清单和实际文件不匹配。我签出git repo,然后
      mv README.rst README
      然后
      python setup.py install
      。这对我有效:-)链接已断开,但
      pip install pydot2
      有效,而此链接有效。
      pip install pydot
      
      pyparsing = reload(pyparsing)
      pydot = reload(pydot)
      
      print pyparsing.__version__
      
      if not pydot.find_graphviz():
          raise ImportError('Failed to import pydot. You must install pydot'
                            ' and graphviz for `pydotprint` to work.')
      
      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'
      #