在 PydotPlus 中导入时 GraphViz 不工作(`GraphViz's executables not found`)

数据挖掘 Python 可视化 朱庇特 蟒蛇 图形可视化
2021-09-30 23:07:07

我一直在尝试使这些软件包工作很长时间,但没有成功。基本上错误是:

GraphViz's Executables not found

编辑:我最初没有发布log带有错误的终端。我现在正在使用Ubuntu,所以我将无法重现我过去遇到的完全相同的错误(一年前,过去如此遥远......)。但是,我在当前设置中遇到了类似的错误——如果不一样的话——错误;即使在使用带有pipenv. 该错误似乎来自@张乾元的回答中描述的行:

Traceback (most recent call last):
  File "example.py", line 49, in <module>
    Image(graph.create_png())
  File "/home/philippe/.local/lib/python3.6/site-packages/pydotplus/graphviz.py", line 1797, in <lambda>
    lambda f=frmt, prog=self.prog: self.create(format=f, prog=prog)
  File "/home/philippe/.local/lib/python3.6/site-packages/pydotplus/graphviz.py", line 1960, in create
    'GraphViz\'s executables not found')
pydotplus.graphviz.InvocationException: GraphViz's executables not found

我尝试GraphViz通过 2 种不同的方式进行安装:通过包pip install graphviz和通过.msi包(还尝试安装pydotpydotplus并且graphviz以许多不同的顺序)。

我试图运行的代码只是Iris Datasetdot-to-png的转换器

from sklearn.tree import DecisionTreeClassifier
import sklearn.datasets as datasets
from sklearn.externals.six import StringIO
from sklearn.tree import export_graphviz

import pandas as pd
import pydotplus

from IPython.display import Image

iris = datasets.load_iris()
df = pd.DataFrame(iris.data, columns = iris.feature_names)
y = iris.target

dtree = DecisionTreeClassifier()
dtree.fit(df,y)

dot_data = StringIO()
export_graphviz(
    dtree, 
    out_file = dot_data,
    filled = True, 
    rounded = True,
    special_characters = True
)
graph_1 = pydotplus.graph_from_dot_data(dot_data.getvalue())
Image(graph_1.create_png())

Jupyter Notebooks里面,Atom系统似乎在寻找GraphViz里面pydotplus,正如它所指向的那样~\Anaconda3\lib\site-packages\pydotplus\graphviz.py不应该反过来吗?

最后,我只想指出,我已经尝试将GraphViz' 路径添加到系统的PATHusing 中C:\Users\Philippe\Anaconda3\Library\bin\graphviz

4个回答

请参阅:未找到 Graphviz 的可执行文件(Python 3.4) ,并且 graphviz 包没有在 windows #1666 上将可执行文件添加到 PATH graphviz #1357的问题 - 这是 PATH 环境变量设置反复出现的问题(对于程序)。安装特定版本,或以特定顺序,或手动添加 PATH 可以解决问题。

最好是 Package 正确设置 PATH在您卸载 Package 时将其删除(这样您就不会获得太长的 PATH - 这通常不会发生)。手动设置它可以防止将来损坏并强制它工作,但如果你卸载包,你需要手动删除额外的文本。

以下是这三个链接的建议:

  1. pip install graphviz
  2. conda install graphviz

或者

你需要跑

conda install python-graphviz

代替

pip install graphviz

获取这些绑定,它们也适用于 conda 的 Graphviz 包。

或者

  1. 从https://graphviz.gitlab.io/_pages/Download/Download_windows.html下载并安装 graphviz-2.38.msi(使用最新版本)

  2. 设置路径变量

        (a) 控制面板 > 系统和安全 > 系统 > 高级系统设置 > 环境变量 > 路径 > 编辑

        (b) 添加'C:\Program Files (x86)\Graphviz2.38\bin'

就我而言,我可以在graphviz中手动找到可执行文件anaconda3\Library\bin\graphviz,但我仍然会收到GraphViz's Executables not found错误消息。

我尝试过张千元的建议以及模块安装使用的具体顺序python-graphviz(官方解决方案,这里广泛讨论),没有成功。我唯一没有尝试过的就是篡改我的PATH系统范围内的变量。

一种对我有用的方法是在我的代码中插入这些行(在 graphviz 相关函数之前):

import os

os.environ['PATH'] = os.environ['PATH']+';'+os.environ['CONDA_PREFIX']+r"\Library\bin\graphviz"

这是一个肮脏的小技巧,但有一些优点:

  • PATH更改在本地生效,直到os重新加载模块
  • 无需更改模块脚本
  • 无需更改PATH系统范围

我正在使用 Python 3.7、Windows 10、Anaconda。Graphviz 是使用 安装的conda install python-graphviz,但我认为在这种情况下没有任何区别

如果你有 Anaconda,你可以使用 Conda 管理器。

Conda在开始面板中键入并尝试通过 Conda 安装。

例如:

pip3 install graphviz

什么对我的用例有用:在Django. 但它也可以扩展为任何其他应用程序生成图表。

我安装了用于从文件GraphViz中查看图表。.dot可以从graphviz.org安装。

  1. 创建与项目关联的点文件:

    python manage.py graph_models -a > dotfile.dot
    

    或者您可以.dot为多个应用程序创建文件。参考:Thomas使用 django-extensions 在 django 应用程序中可视化数据库

  2. 现在您只需要查看dotfile.dot. 那么我应该在哪里将其视为图像?

    • 现在打开应用程序安装路径gvedit.exe中的文件(我不知道对应的文件是什么Linux
      • 对于窗户:C:\Program Files (x86)\Graphviz2.38\bin\gvedit.exe.
  3. 现在运行gvedit.exe并打开.dot到目前为止创建的文件。