【问题标题】:How to correctly execute 'dot' from Graphviz in Spyder (Anaconda) in a macOS?如何在 macOS 的 Spyder (Anaconda) 中正确执行 Graphviz 中的“点”?
【发布时间】:2023-03-03 21:54:01
【问题描述】:

问题:如何在 macOS 的 Spyder (Anaconda) 中正确执行 Graphviz 中的 'dot'?

背景:我知道这个话题已经在其他帖子中讨论过:

但是我已经尝试了这些帖子的所有建议,但我仍然收到错误:

Exception: “dot” not found in path in python on mac

FileNotFoundError: [Errno 2] No such file or directory: 'dot'

ExecutableNotFound: failed to execute ['dot', '-Kdot', '-Tpdf', '-O', 'FileName'], make sure the Graphviz executables are on your systems' PATH

我已经安装了 Graphviz,如下所示,dot 正在工作:

上面可以通过输入看到:

dot -V

它返回我安装的版本。以及打字时:

which dot

它返回文件的位置(即 /usr/local/bin)。我已经用这条路径尝试了几件事。

  1. 将其添加到 Spyder 中的路径中:

  1. 我在主系统PATH中添加了:

  1. 我什至在 Python 中运行了一个脚本,试图从代码中添加路径(我尝试过在路径末尾添加和不添加“点”):

以上解决方案都不适合我。如果有人能给我一些见解来解决这个问题,我将不胜感激。

例如,您可以尝试下面的代码,这是给我错误的代码 (source):

import graphviz

dot = graphviz.Digraph(comment='The Round Table')

dot.node('A', 'King Arthur')
dot.node('B', 'Sir Bedevere the Wise')
dot.node('L', 'Sir Lancelot the Brave')
dot.edges(['AB', 'AL'])
dot.edge('B', 'L', constraint='false')

dot.render('FileName', view=True)

【问题讨论】:

    标签: python macos spyder graphviz dot


    【解决方案1】:

    除了在主系统路径中包含“.dot”可执行文件的位置并将其从 Spyder 在 PYTHONPATH 管理器中添加到 PATH 之外,我还尝试了其他几件事,我将总结对我有用的步骤。我希望这也适用于你。

    • 第一步:我从official site下载了Anaconda。

    • 第2步:我安装的版本是1.10.0。该版本已经预装了Spyder 4.1.5

    • 第 3 步:我尝试运行上面描述中给出的示例,但出现了相同的错误。我尝试使用命令(来自 Spyder 控制台)安装 Graphviz:

      conda 安装 graphiz

    • 注意:当我使用上述命令时,它花了很长时间并且出现了一些环境问题,并显示一条消息“正在解决环境......”然后我决定停止它(CTRL + C ),然后继续第 4 步。

    • 第 4 步:我分别使用以下命令更新了 Anaconda 和 Spyder:

      conda 更新 anaconda

      conda 更新 spyder

    • 注意:我查了Spyder版本,已经是4.2.1(之前是4.1.5)

    • 第 5 步:现在,我打开 Spyder,再次输入命令:

      conda 安装 graphiz

    • 注意:这一次,一开始出现了几条警告信息,但过了一分钟就成功安装了。

    • 第 6 步:我重新启动内核,再次运行示例,这次成功了!!

    您可以在下面看到 Graphviz 出现在 Anaconda 环境中(之前没有):

    最后,我执行了这个例子:

    import graphviz
    
    dot = graphviz.Digraph(comment='The Round Table')
    
    dot.node('A', 'King Arthur')
    dot.node('B', 'Sir Bedevere the Wise')
    dot.node('L', 'Sir Lancelot the Brave')
    dot.edges(['AB', 'AL'])
    dot.edge('B', 'L', constraint='false')
    
    dot.render('FileName', view=True)
    

    我得到了:

    【讨论】:

      猜你喜欢
      • 2016-08-20
      • 1970-01-01
      • 2021-08-09
      • 1970-01-01
      • 2020-03-16
      • 1970-01-01
      • 2020-11-27
      • 2021-05-30
      • 2021-11-09
      相关资源
      最近更新 更多