为什么pydot无法在Windows 8中找到GraphViz的可执行文件?


71

我在Windows 8中安装了GraphViz 2.32,并将C:\ Program Files(x86)\ Graphviz2.32 \ bin添加到系统PATH变量中。pydot仍然找不到其可执行文件。

Traceback (most recent call last):
  File "<pyshell#26>", line 1, in <module>
    graph.write_png('example1_graph.png')
  File "build\bdist.win32\egg\pydot.py", line 1809, in <lambda>
    lambda path, f=frmt, prog=self.prog : self.write(path, format=f, prog=prog))
  File "build\bdist.win32\egg\pydot.py", line 1911, in write
    dot_fd.write(self.create(prog, format))
  File "build\bdist.win32\egg\pydot.py", line 1953, in create
    'GraphViz\'s executables not found' )
InvocationException: GraphViz's executables not found

我找到了这个https://code.google.com/p/pydot/issues/detail?id=65,但无法解决问题。


现在,您可以可视化树而不安装点sklearn.tree.plot_tree
安德烈亚斯·穆勒

Answers:


74

问题是pydot模块找不到GraphViz的路径,如回溯所示:

找不到“ GraphViz \的可执行文件”

我在Windows 7计算机上通过将GraphViz bin目录添加到计算机的PATH解决了此问题。然后重新启动我的python IDE以使用更新的路径。

  1. 如果尚未安装GraphViz(我使用MSI下载)
  2. 获取gvedit.exe的路径(对我来说是“ C:\ Program Files(x86)\ Graphviz2.34 \ bin \”)
  3. 将此路径添加到计算机的PATH中
  4. 进入环境设置来设置路径的一种方法是单击以下每个按钮/菜单选项:开始->计算机->系统属性->高级设置->环境变量
  5. 单击编辑用户路径
  6. 将此字符串添加到变量值列表(包括分号)的末尾: ; C:\ Program Files(x86)\ Graphviz2.34 \ bin
  7. 点击确定
  8. 重新启动您的Python IDE

2
在我的Windows 8系统我正在错误,直到我意识到,在Windows 8中,我不应该使用的路径周围的引号(“)除去他们的一切后去漂亮。
srodriguex

这解决了我在Anaconda安装上的问题;尝试安装“ Graphviz”并将其添加为Path变量时遇到很多问题。“ msi”路由有效,但“ pip”,“ conda”安装路由均失败。
Sumanth Lazarus

66

在Mac上brew install graphviz为我解决了这个问题。


为我工作!谢谢!
Mikebarson

sudo aptitude install graphviz分别在ubuntu(18)上工作
Simeon

30

这是因为我在安装pydot之后安装了graphviz。因此,pydot无法找到它。以正确的顺序重新安装可以解决该问题。


4
pydot和GraphViz的安装顺序与是否pydot可以找到GraphViz无关。GraphViz可执行文件应该位于当前路径中,以便pydot能够检测到它们。
Ioannis Filippidis

顺序无关紧要:)
Akash Kandpal '18

顺序无关紧要
Vinay billa

24

我尝试通过控制面板添加PATH,但是还需要重新启动命令提示符。以下内容也适用于在不退出的情况下更新Notebook会话中的路径:

import os     

os.environ["PATH"] += os.pathsep + 'C:/Program Files (x86)/Graphviz2.38/bin/'

1
您不必重新启动整个计算机,只需重新启动要使用的程序即可。这可能是您从中运行笔记本服务器的命令提示符。
danio '16

它在Windows 10计算机中工作。感谢您分享此代码
Siddharth Thanga Mariappan

惊人!它有帮助!我尝试了一切-但这解决了!谢谢!
卢巴·魏斯曼



7

对于Windows 8.1和python 2.7,我按照以下步骤修复了问题

1。下载并安装graphviz-2.38.msi https://graphviz.gitlab.io/_pages/Download/Download_windows.html

2。设置路径变量

控制面板>系统和安全性>系统>高级系统设置>环境变量>路径>编辑添加'C:\ Program Files(x86)\ Graphviz2.38 \ bin'

  1. 重新启动当前正在运行的需要路径的应用程序

1
这为我解决了。注意:由于已经在运行的应用程序可能无法自动适应更新的环境,因此应重新启动需要新路径的任何应用程序(请参阅如何在不重新启动的情况下添加Windows环境变量)。
SND

5

我正在使用Anaconda 3.6.5在Windows 10上工作。我没有管理员权限,因此,如果有人在像我这样的情况下,此解决方案非常有效。

我的graphviz的路径是外观 C:\Users\User_Name\AppData\Local\Continuum\anaconda3\Library\bin\graphviz

在Spyder或Jupyter中,键入以下内容:

import os os.environ['PATH'].split(os.pathsep) 这将列出您环境中的所有路径。看看他们,如果您的graphviz路径不在这里,那么去找到它并复制该路径,就像上面的示例一样。然后键入以下内容: os.environ['PATH'] += os.pathsep + 'C:\\Users\\User_Name\\AppData\\Local\\Continuum\\anaconda3\\Library\\bin\\graphviz'

仅此而已,但是请注意,如果重新启动内核,则每次都必须运行这些命令


4

将dot.exe添加到您的路径。右键单击我的电脑>高级系统设置>环境变量>高亮“路径”>编辑,然后将引号中的所有内容附加到路径“; C:\ Program Files(x86)\ Graphviz2.34 \ bin \”,具体取决于安装位置当然是Graphviz。然后重新启动python shell并键入。

import pydot pydot.find_graphviz()确保在'bin'之后有一个斜杠,以便它从文件夹中获取所有内容,我尝试使用斜杠,并且上面的代码未返回任何内容,但是在添加了斜杠后,它返回了graphviz可执行文件需要和他们的道路。


我在Windows 10中按照您的指示进行了操作,但是Windows并未将我的模块路径(在Google驱动器中)添加到路径列表中,即使它显示在窗口中也是如此。检查您的路径是否实际添加到路径列表的一种方法是打开新终端并运行“ path”。
Dr.PP

3

对我来说:(Win10,Anaconda3)确保已完成“ conda install graphviz”

我必须添加到PATH:C:\ Users \ username \ Anaconda3 \ Library \ bin \ graphviz

要修改PATH,请转到“控制面板”>“系统和安全性”>“系统”>“高级系统设置”>“环境变量”>“路径”>“编辑”>“新建”

之后,请务必重新启动您的IDE。它应该工作


2

在Windows中,即使安装了graphviz-2.38.msi,也可以在pydot.py中添加自己的路径(位于site-package文件夹下)

 if os.sys.platform == 'win32':

    # Try and work out the equivalent of "C:\Program Files" on this
    # machine (might be on drive D:, or in a different language)
    #

    if os.environ.has_key('PROGRAMFILES'):

        # Note, we could also use the win32api to get this
        # information, but win32api may not be installed.

        path = os.path.join(os.environ['PROGRAMFILES'], 'ATT', 'GraphViz', 'bin')

    else:

        #Just in case, try the default...
        path = r"C:\PYTHON27\GraphViz\bin"  # add here.

1
我应该注意到,您所指向的else子句不会总是到达。因此,我在的开头添加了显式路径find_grapviz()。当然,这是非常肮脏的解决方案,但是我在尝试使事情正常进行时却浪费了愚蠢的时间,这太令人讨厌了。因此,这实际上是一个不错的技巧。
dmitry '17

2

我也遇到了同样的问题,最后通过查看库解决了这个问题。

该库考虑将路径设置为C:\ Program Files \ ATT \ Graphviz \ bin,但是默认情况下,Graphviz安装到C:\ Program Files(x86)\ Graphviz,并且接受32位标准,因此pydot无法获取所需的路径路径。只需按照脚本要求移动目录,就可以了。

PS:-考虑对Environmnet变量进行相同的更改。

PSS:-还检查Graphviz是否直接在Program Files(x86)或ATT下。


1

我正在运行Windows 10计算机,也遇到了一些问题。我通过msi安装程序安装了graphviz。通过系统设置添加对我不起作用。

我用msi删除了安装,并使用了Windows程序包管理器Chocolatey。删除已安装的版本是必要的,否则不会安装Chocolatey。

现在运行正常。我建议这样做。


1

这是我针对上述问题所做的工作。我正在使用Windows 10 OS和python 3.6.5

  1. 单击此处安装PIP

  2. 打开命令提示符,然后键入命令“ pip install graphviz”

  3. 转到我的电脑(此电脑),然后使用关键字“ graphviz”进行搜索

  4. 打开graphviz文件夹并复制其路径并将其保存在记事本中

  5. 在graphviz中查找bin文件夹,然后通过右键单击复制文件夹

  6. 现在再次回到我的电脑并搜索“ pydotplus”

  7. 显示一个名为pydotplus的文件夹。打开它并粘贴您先前复制的(Graphviz)bin文件夹的副本

  8. 转到控制面板>系统和安全性>系统设置>高级设置>环境变量>添加新路径

  9. 添加您在记事本中复制的路径,然后单击一系列的“确定”

就这样,现在您可以享受使用graphviz了


有人知道为什么我的graphviz文件夹没有bin文件夹吗?仅pycache和.py文件
Supamee


1

关于graphviz的一些知识:

  1. graphviz不仅是python模块,还是一个独立程序。我相信你们都需要使graphviz正常工作。
  2. 独立的graphviz程序最初由AT&T开发,开源,然后被放弃。该软件包的当前维护者忘记了包含Windows注册表项,因此Python可以找到程序可执行文件。
  3. pydotplus \ graphviz.py的第620行包含一个备份路径,用于在注册表中找不到graphviz的情况。它使用旧的ATT文件路径。将文件路径更新为您计算机上的文件路径(您将需要具有管理员权限),并且graphviz应该可以与pydotplus一起使用。

例:

# Just in case, try the default... path = r"C:\Program Files (x86)\Graphviz2.38\bin"


1

在“ pydot.py”(位于... \ Anaconda3 \ Lib \ site-packages中)中,替换:

def get_executable_extension():
    # type: () -> str
    if is_windows():
        return '.bat' if is_anacoda() else '.exe'
    else:
        return ''

与:

def get_executable_extension():
    # type: () -> str
    if is_windows():
        return '.exe'
    else:
        return ''

当系统是“ Windows / Anaconda”与“ Windows”时,似乎没有任何理由添加“ .bat”,并且可能没有与“ .exe”关联的“ .bat”。这似乎比为每个可执行pydot调用添加“ .bat”更好。


这对我有用,并且与另一个步骤相关:将包含dot.exe可执行文件的文件夹添加到path变量中。

0

我遇到了这个问题,并注意到它用两组双引号打印了我的PATH。我通过将以下内容添加到1959行中来解决此问题:

C:\Anaconda\Lib\site-packages\pydot.py

self.progs[prog] = os.path.normpath(self.progs[prog][1:-1])

显然,这不是最好的解决方法,但它使我整日忙碌。



0

按照所有解决方案/发布/博客中的描述尝试了所有安装顺序,最终意识到anaconda无法读取环境变量。封闭的水蟒和Spyder。然后以管理员模式(在Windows 64位OS计算机上)打开Anaconda,然后打开Spyder。脚本与PYDOT调用配合良好。


0

我没有使用Windows机器,而是在Linux平台上。在使用python包pyAgrum绘制贝叶斯网络的情况下,我遇到了一个可执行文件未找到的问题。pyAgrum使用graphviz绘制网络。我在python 3.6.4环境中使用anaconda平台安装了pyagrum和graphvizconda install <package name>)中。

我在/conda/envs/<environment name>/bin目录中找到了可执行文件。因此,只需要让我的笔记本内核找到它们即可。

如果您import os使用os.environ['PATH'].split(os.pathsep),请使用命令查看您的环境正在寻找的可执行路径。如果包含graphviz可执行文件的路径不在其中,则可以通过执行以下操作添加它:os.environ['PATH'] += os.pathsep + <path to executables>

我想象这种解决方案将在我的上下文之外起作用。该解决方案的主要缺点是,每次重新启动内核时都需要这样做。


0

您可以使用pydotplus代替pydot。然后按照以下步骤操作:

首先,找到 C:\Users\zhangqianyuan\AppData\Local\Programs\Python\Python36\Lib\site-packages\pydotplus

二,开 graphviz.py

第三,找到第1925行-1972行,找到函数 def create(self, prog=None, format='ps'):

最终,在函数中:

  1. 找:

    if prog not in self.progs:
        raise InvocationException(
            'GraphViz\'s executable "%s" not found' % prog)
    

    `

    if not os.path.exists(self.progs[prog]) or \
            not os.path.isfile(self.progs[prog]):
        raise InvocationException(
            'GraphViz\'s executable "{}" is not'
            ' a file or doesn\'t exist'.format(self.progs[prog])
        )
    
  2. 在两个块之间添加以下内容(您的Graphviz的可执行路径):

    self.progs[prog] = "C:/Program Files (x86)/Graphviz2.38/bin/gvedit.exe"

  3. 添加后的结果是:

    if prog not in self.progs:
        raise InvocationException(
            'GraphViz\'s executable "%s" not found' % prog)
    
    self.progs[prog] = "C:/Program Files (x86)/Graphviz2.38/bin/gvedit.exe"
    
    if not os.path.exists(self.progs[prog]) or \
            not os.path.isfile(self.progs[prog]):
        raise InvocationException(
            'GraphViz\'s executable "{}" is not'
            ' a file or doesn\'t exist'.format(self.progs[prog])
        )
    
  4. 保存更改的文件,则可以成功运行它。

  5. 您最好将其另存为bmp文件,因为png文件将无法工作。 图片在这里


为什么两次相同的答案stackoverflow.com/questions/28312534/…(即双重维护),更好地交叉链接到其他答案。
艾伯特

0

如果您不想弄乱路径变量(例如,如果您不是管理员)并且在Windows上工作,则可以执行以下操作来为我解决问题。

在编辑器中打开graphviz.py(可能位于中...Anaconda\pkgs\graphviz***\Library\bin)。如果找不到它,则可以通过错误消息将其打开。

转到功能__find_executables并替换:

elif os.path.exists(os.path.join(path, prg + '.exe')):
   if was_quoted:
      progs[prg] = '"' + os.path.join(path, prg + '.exe') + '"'
   else:
      progs[prg] = os.path.join(path, prg + '.exe')

elif os.path.exists(os.path.join(path, prg + '.bat')):
   if was_quoted:
      progs[prg] = '"' + os.path.join(path, prg + '.bat') + '"'
   else:
      progs[prg] = os.path.join(path, prg + '.bat')

0

该解决方案很简单,您只需从此处下载并安装Graphviz 。

然后将path变量设置为bin目录,在本例中为C:\Program Files (x86)\Graphviz2.38\bin。最后,执行conda install python-graphviz,它应该可以正常工作。


0

在Anaconda发行版上,pip安装不起作用。我先做了一个pip uninstall graphvizpip uninstall pydot然后conda install graphvizconda install pydot按照这个顺序做了,然后就可以了!


0

我使用了conda install python-graphviz,然后conda install pydot,然后conda install pydot plus,然后它起作用了。

所以:

conda install python-graphviz
conda install pydot
conda install pydotplus

0

在完成所有的graphviz安装之后,将其添加到环境变量的PATH中,您需要添加以下两行:

import os
os.environ["PATH"] += os.pathsep + 'C:/Program Files (x86)/Graphviz2.38/bin/'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.