如何在 macOS 的 Spyder (Anaconda) 中正确执行 Graphviz 中的“点”?

Posted

技术标签:

【中文标题】如何在 macOS 的 Spyder (Anaconda) 中正确执行 Graphviz 中的“点”?【英文标题】:How to correctly execute 'dot' from Graphviz in Spyder (Anaconda) in a macOS? 【发布时间】:2021-05-27 20:49:48 【问题描述】:

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

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

How to use Graphviz with Anaconda/Spyder? (Python) ValueError: Program dot not found in path Exception: “dot” not found in path in python on mac

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

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)。我已经用这条路径尝试了几件事。

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

    我在主系统PATH中添加了:

    我什至在 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)

【问题讨论】:

【参考方案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)

我得到了:

【讨论】:

以上是关于如何在 macOS 的 Spyder (Anaconda) 中正确执行 Graphviz 中的“点”?的主要内容,如果未能解决你的问题,请参考以下文章

macOS系统通过conda安排spyder

在 MacOS 上安装 Spyder/Python - 非常令人沮丧

MacOS 上的 Spyder。打字很慢

Anaconda&spyder:tensorflow安装(windows)

macports安装后如何启动spyder

python: spyder、anaconda 和 pygame