GraphViz funktioniert beim Import in PydotPlus nicht (`Die ausführbaren Dateien von GraphViz wurden nicht gefunden`)

17

Ich habe schon seit einiger Zeit versucht, diese Pakete zum Laufen zu bringen, aber ohne Erfolg. Grundsätzlich ist der Fehler:

GraphViz's Executables not found

EDIT : Ich hatte logursprünglich kein Terminal mit dem Fehler gepostet . Ich verwende es Ubuntujetzt, damit ich nicht genau den Fehler reproduzieren kann, den ich in der Vergangenheit erhalten habe (vor einem Jahr, so weit weg in der Vergangenheit ...). In meinem aktuellen Setup ist jedoch ein ähnlicher - wenn nicht derselbe - Fehler aufgetreten. auch bei Verwendung einer virtuellen Umgebung mit pipenv. Der Fehler scheint von Zeilen zu stammen, die in der Antwort von @ 张 乾元 beschrieben wurden :

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

Ich habe versucht, GraphVizüber zwei verschiedene Arten zu installieren : über pip install graphvizund durch das .msiPaket (und auch versucht zu installieren pydot, pydotplusund graphvizin vielen verschiedenen Reihenfolgen).

Der Code, den ich ausführen möchte, ist einfach ein dot-to-pngKonverter für den Iris-Datensatz .

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())

In Jupyter Notebooksund in Atomscheint das System nach GraphVizinnen zu suchen pydotplus, wie es zeigt ~\Anaconda3\lib\site-packages\pydotplus\graphviz.py. Sollte es nicht umgekehrt sein?

Schließlich möchte ich nur darauf hinweisen , dass ich schon versucht habe , das Hinzufügen GraphViz‚s Pfad zum System ist PATHunter Verwendung C:\Users\Philippe\Anaconda3\Library\bin\graphviz.

Philippe Fanaro
quelle
2
Vielen Dank, dass Sie diese Frage gestellt haben.
AturSams
Der beste Weg , um mit diesen problematischen Installationsproblemen wahrscheinlich den Umgang mit einer Art unabhängiger Umgebung wie mit pipenv, virtualenvoder Docker Containers, obwohl ich noch nicht richtig es noch geprüft.
Philippe Fanaro

Antworten:

15

Siehe: Die ausführbaren Dateien von Graphviz wurden nicht gefunden (Python 3.4) und das graphviz-Paket fügt PATH unter Windows 1666 und Problem mit graphviz 1357 keine ausführbare Datei hinzu - es handelt sich um ein wiederkehrendes Problem (für dieses Programm) mit den Einstellungen der PATH-Umgebungsvariablen. Das Installieren bestimmter Versionen oder in einer bestimmten Reihenfolge oder das manuelle Hinzufügen eines Pfads behebt das Problem.

Es ist am besten, wenn das Paket den PFAD korrekt festlegt und entfernt, wenn Sie das Paket deinstallieren (damit Sie keinen zu langen PFAD erhalten - was normalerweise nicht der Fall ist). Durch manuelles Einstellen wird ein zukünftiger Bruch verhindert und das Funktionieren erzwungen. Sie müssen den zusätzlichen Text jedoch manuell entfernen, wenn Sie das Paket deinstallieren.

Hier ist der Rat von diesen drei Links:

  1. pip install graphviz
  2. conda install graphviz

oder

Du musst rennen

conda install python-graphviz

anstatt

pip install graphviz

um diese Bindungen zu erhalten, die auch mit dem Graphviz-Paket von conda funktionieren.

oder

  1. Laden Sie graphviz-2.38.msi (verwenden Sie die neueste Version) von https://graphviz.gitlab.io/_pages/Download/Download_windows.html herunter und installieren Sie es

  2. Legen Sie die Pfadvariable fest

        (a) Systemsteuerung> System und Sicherheit> System> Erweiterte Systemeinstellungen> Umgebungsvariablen> Pfad> Bearbeiten

        (b) Fügen Sie 'C: \ Programme (x86) \ Graphviz2.38 \ bin' hinzu.

rauben
quelle
Genau das habe ich in der Post beschrieben. Und die anderen Links, die Sie erwähnt haben, habe ich auch schon gesehen oder ausprobiert. Sie werden auch ziemlich alt, also dachte ich, vielleicht hätte sich in der Zwischenzeit jemand eine bessere Lösung ausgedacht.
Philippe Fanaro
Ich denke, ich werde versuchen, vielleicht morgen alles, was ich mit Python zu tun habe, zu deinstallieren und zu sehen, was passiert. Vielleicht würde ein sauberes Blatt helfen, idk.
Philippe Fanaro
Ich kann GraphViz immer noch nicht ausführen, nachdem ich alle oben genannten Methoden getestet habe
Revolucion für Monica
@ IggyPass, diese Antwort ist fast ein paar Jahre alt. Ich habe den 2. Link oben überprüft und festgestellt, dass BR geschlossen wurde. Ein Fix wird angeboten. Der dritte Link schlägt die dritte Lösung vor, die ich vorgestellt habe. Anscheinend ist dies immer noch die neueste kompilierte Version von Drittanbietern. Die neuesten Versionen werden nur in der Quelle angeboten und müssen selbst kompiliert werden. Ich benutze ein Mobiltelefon, während ich auf den Kauf eines neuen Computers warte. Leider kann ich diese Antwort bis dahin nicht aktualisieren. Die vorkompilierte Version und die meisten dieser Antworten haben ein gemeinsames Thema. Sie müssen den PFAD entsprechend Ihrem System einstellen.
Rob
5

In meinem Fall kann ich graphvizausführbare Dateien manuell finden anaconda3\Library\bin\graphviz, aber ich würde trotzdem den GraphViz's Executables not foundFehler erhalten.

Ich habe den Vorschlag von zhangqianyuan sowie bestimmte Anweisungen für die Installation und Verwendung von Modulen erfolglos ausprobiert python-graphviz(offizielle Lösung, die hier ausführlich diskutiert wird ). Ich habe nur versucht, meine PATHVariable systemweit zu manipulieren .

Eine Methode, die für mich funktioniert hat, war das Einfügen dieser Zeilen in meinen Code (vor den Funktionen von graphviz):

import os

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

Dies ist ein schmutziger kleiner Hack, aber es gibt einige gewisse Vorteile:

  • PATHÄnderungen werden lokal und bis zum oserneuten Laden des Moduls wirksam
  • Modulskripte müssen nicht geändert werden
  • Keine PATHsystemweite Änderung erforderlich

Ich verwende Python 3.7, Windows 10, Anaconda. Graphviz wurde mit installiert conda install python-graphviz, aber ich glaube nicht, dass es in diesem Fall einen Unterschied gibt

Sarunas
quelle
2

Wenn Sie Anaconda haben, können Sie den Conda-Manager verwenden.

Geben Sie Condaim Startfenster ein und versuchen Sie, es über Conda zu installieren.

Zum Beispiel:

pip3 install graphviz
Fuwiak
quelle
1
(...) Ich habe es bereits versucht ...
Philippe Fanaro
Aber über Conda Manager?
Fuwiak
Ja, und in verschiedenen Reihenfolgen.
Philippe Fanaro
2

Was für meinen Anwendungsfall funktioniert hat : Generieren von Modelldiagrammen in Django. Es kann aber auch erweitert werden, um Diagramme für andere Anwendungen zu erstellen.

Ich habe das GraphVizzum Anzeigen des Diagramms aus der .dotDatei installiert . Kann von graphviz.org installiert werden .

  1. Erstellen Sie eine dem Projekt zugeordnete Punktdatei:

    python manage.py graph_models -a > dotfile.dot

    Oder Sie können die .dotDateien für mehrere Apps erstellen . Referenz: Verwenden von Django-Erweiterungen zur Visualisierung des Datenbankdiagramms in der Django-Anwendung von Thomas .

  2. Jetzt müssen Sie nur noch anzeigen dotfile.dot. Wo soll ich das als Bild sehen?

    • Öffnen Sie nun die Datei gvedit.exe(ich weiß nicht, in welcher Datei sie sich befindet Linux) im installierten Pfad der Anwendung.
      • Für Fenster : C:\Program Files (x86)\Graphviz2.38\bin\gvedit.exe.
  3. Führen Sie nun die bisher erstellte Datei aus gvedit.exeund öffnen Sie sie .dot.

sbhusal123
quelle
1
  1. Finden:C:\Users\zhangqianyuan\AppData\Local\Programs\Python\Python36\Lib\site-packages\pydotplus

  2. Öffnen graphviz.py

  3. Finden Sie Zeile 1925 - Zeile 1972, finden Sie die Funktion:

    def create(self, prog=None, format='ps'):
  4. In der Funktion finden Sie:

    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])
        )
  5. Fügen Sie zwischen den beiden Blöcken Folgendes hinzu (den ausführbaren Pfad Ihres Graphviz):

      self.progs[prog] = "C:/Program Files (x86)/Graphviz2.38/bin/gvedit.exe"`
  6. Nach dem Hinzufügen ist das Ergebnis:

    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])
        )
  7. Speichern Sie die geänderte Datei, und führen Sie sie erfolgreich aus.

  8. Sie sollten es besser als BMP-Datei speichern, da die PNG-Datei nicht funktioniert. Bild ist hier

张 乾元
quelle
0

Ich habe das gleiche Problem, so dass ich pydotplus nur unabhängig installiert habe (pip3 install pydotplus) und pydotplus importiere, alles funktioniert gut.

Risikoberatung
quelle
0

Ich hatte das gleiche Problem und habe alles in diesem und anderen Foren vorgeschlagen und nichts hat geklappt. Die folgenden Anweisungen lösen dieses Problem zu 100%, wenn Sie Windows und Python 3 verwenden:

  1. Installieren Sie pydotplusüber Conda:conda install pydotplus

  2. graphvizUnabhängig installieren conda install python-graphviz(wenn Sie diese beiden Schritte bereits ausgeführt haben, fahren Sie direkt mit Schritt 3 fort.)

  3. Angenommen, Sie haben bereits graphviz und pydotplus installiert, suchen Sie die graphviz.pyDatei in Ihrem pydotplus Installationsverzeichnis. In meinem Fall befand sie sich im folgenden Pfad:C:\Users\Acevedo\Anaconda3\Lib\site-packages\pydotplus\graphviz.py

  4. Öffnen graphviz.pySie diesen Block und suchen Sie ihn in Zeile 606

    # Method 3 (Windows only)
    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 'PROGRAMFILES' in os.environ:
            # 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:\Program Files\att\Graphviz\bin"
    
        progs = __find_executables(path)
  5. Kommentieren Sie die if / else Teil und codieren den Pfad Ihrer graphviz Installationsverzeichnis, in dessen Innerem die ausführbaren Dateien sein sollte ( dot.exe, circo.exe, gvedit.exe, etc.). Der neue Code muss folgendermaßen aussehen:

    # Method 3 (Windows only)
    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 'PROGRAMFILES' in os.environ:
            # 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:\Program Files\att\Graphviz\bin"
            """
        path = r"C:\Users\Acevedo\Anaconda3\Library\bin\graphviz"
    
        progs = __find_executables(path)
  6. Speichern Sie die graphviz.pyDatei und alles sollte gut funktionieren :)

Armando Acevedo Luna
quelle
0

Aktualisierung durch Ausführen in der Anaconda-Eingabeaufforderung:

conda install python-graphviz

bis Version 2.38 (2019.10.16-0) hat den Trick für mich gemacht.

Senya
quelle
0

Navigierte zu anaconda Directory

C:\ProgramData\Anaconda3\Library\bin

Mir wurde klar, dass Graphviz bereits installiert war. Ich ging nur zu

Control Panel > System and Security > System > Advanced System Settings > Environment Variables > Path > Edit

und hinzugefügt

"C:\ProgramData\Anaconda3\Library\bin\graphviz"

Raymond Vertrauen
quelle