如何在 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 上安装 Spyder/Python - 非常令人沮丧