python - 使用 Anytree 和 graphviz 在 python 中渲染树。无法打开文件

标签 python graphviz pydot anytree

这个问题基于Tarun关于使用anytree和graphviz在python中渲染树的答案:https://stackoverflow.com/a/49442969/2139007

安装 graphviz 并将其添加到我的 PATH 变量后,我尝试运行以下 python 代码:

DotExporter(nodes[0]["a"],
        nodeattrfunc=lambda node: 'label="{}"'.format(node.display_name)).to_picture("tree.png")

上面的代码生成以下错误:

  Error: dot: can't open C:\Users\username\AppData\Local\Temp\tmpa7t554le
Traceback (most recent call last):
  File "D:\mypath\tree.py", line 34, in <module>
    dot.to_picture('tree.png')
  File "C:\Users\username\AppData\Local\Programs\Python\Python36-32\lib\site-packages\anytree\exporter\dotexporter.py", line 229, in to_picture
    check_call(cmd)
  File "C:\Users\username\AppData\Local\Programs\Python\Python36-32\lib\subprocess.py", line 291, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['dot', 'C:\\Users\\username\\AppData\\Local\\Temp\\tmpa7t554le', '-T', 'png', '-o', 'tree.png']' returned non-zero exit status 2.

如果我在生成 .dot 后从控制台手动运行点命令“dot tree.dot -T png -o tree.png”,则不会出现该问题> 文件

DotExporter(nodes[0]["a"],
        nodeattrfunc=lambda node: 'label="{}"'.format(node.display_name)).to_dotfile('tree.dot')

有办法解决这个问题吗?

最佳答案

我刚刚遇到了这个问题。经过2个小时的调试,我发现对于Windows,你必须在dotexporter.py中将删除标志设置为False。转到“dotexporter.py”中的第 224 行并进行以下更改。这似乎是源文件中的错误。这对我有用:

 with NamedTemporaryFile("wb", delete=False) as dotfile:

关于python - 使用 Anytree 和 graphviz 在 python 中渲染树。无法打开文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52493775/

相关文章:

python - Django Rest Framework - 将带有文件和其他数据的多部分/表单数据发送到 API

python - 是否可以从正在运行的 Docker 容器中发送 HTTP 请求

layout - 如何在GraphViz等级布局中强制执行从左到右的节点排序?

Python编码风格——多重返回语句

python - Jinja2 简写条件

python - Django models.FileField - 仅存储文件名而不存储任何路径或文件夹引用

graphviz - 如何反转 Graphviz(点语言)图中每条边的方向?

graph - CMake graphviz自动生成

python - 从 sklearn Python 中的决策树在 pydot 中制作图形

python - 如何在 google colab 上安装 pydot 和 graphviz?