pydot- und graphviz-Fehler: dot_parser konnte nicht importiert werden, das Laden von Punktdateien ist nicht möglich

107

Wenn ich einen sehr einfachen Code mit pydot ausführe

import pydot
graph = pydot.Dot(graph_type='graph')

for i in range(3):

  edge = pydot.Edge("king", "lord%d" % i)
  graph.add_edge(edge)

vassal_num = 0
for i in range(3):
  for j in range(2):
    edge = pydot.Edge("lord%d" % i, "vassal%d" % vassal_num)
    graph.add_edge(edge)
    vassal_num += 1

graph.write_png('example1_graph.png')

Es gibt mir die Fehlermeldung:

Couldn't import dot_parser, loading of dot files will not be possible.

Ich benutze Python 2.7.3

Sadik
quelle
6
pip install pydot2sollte dieses Problem beheben. Viel schöner als die Verwendung, pip uninstalldenn wenn Sie Code freigeben, können Sie einfach pydot2 zu Ihrer Anforderung.txt hinzufügen, ohne dass Benutzer unbekannte Befehle ausführen.
RussellStewart

Antworten:

220

Antwort für pydot >= 1.1:

Die Inkompatibilität von (upstream) pydotwird von fest 6dff94b3f1 , und somit pydot >= 1.1wird mit kompatibelpyparsing >= 1.5.7 .


Antwort gilt für pydot <= 1.0.28:

Für alle anderen, die darauf stoßen, ist dies auf die Änderungen beim Pyparsing von 1.x auf 2.x zurückzuführen. Um pydot mit pip zu installieren, installieren Sie zuerst die ältere Version von pyparsing:

pip install pyparsing==1.5.7
pip install pydot==1.0.28

Wenn Sie nicht pyparsingmit pip, sondern mit installiert setup.pyhaben, sehen Sie sich diese Lösung an, um das Paket zu deinstallieren. Danke @qtips.

Jonathan
quelle
1
Ich habe NetworkX, GraphViz und pydot installiert, konnte jedoch die Graphviz-Funktionalität nicht für NetworkX verwenden (z. B. ist dieses NetworkX-Beispiel fehlgeschlagen). Ich bekam immer wieder: Der globale Name 'dot_parser' ist nicht definiert . Ihre Lösung hat dieses Problem gelöst.
Tipps
1
Funktioniert auch sudo pip uninstallnicht, wenn Sie Ihr Paket python setup.py installin diesem Fall installiert haben. Befolgen Sie diese Lösung. Dies war zumindest auf meinem Mountain Lion OSX Mac der Fall
qtips
sudoist offensichtlich nicht immer notwendig, wie wenn Sie eine virtuelle Umgebung verwenden. Davon abgesehen hat das bei mir funktioniert!
David Reynolds
In Ubuntu 12.04 erhalte ich diesen Fehler bei der Installation von byparsing: "Angefordertes Pyparsing == 1.5.7, aber Installation von Version 2.0.1". Dann tritt der obige Fehler immer noch auf. Die Lösung bestand also darin, den Download-Speicherort des Python-Eies anzugeben: sudo pip install -Iv pypi.python.org/packages/source/p/pyparsing/…
lefterav
45
Warum nicht einfach pip install pyparsing==1.5.7?
Suor
57

Im Pip-Repo gibt es ein neues Paket namens pydot2, das mit pyparsing2 korrekt funktioniert. Ich konnte meine Pakete nicht downgraden, da matplotlib vom neueren Pyparsing-Paket abhängt.

Hinweis: python2.7 von macports

Dana die Gesunde
quelle
7
IMHO Diese Antwort sollte über die pyparsing Herabstufungsidee betrachtet werden. Funktioniert bei mir auch perfekt mit networkx. Vielen Dank !
Raghav RV
Immer noch diesen Fehler geben, aber dot_parser Fehler weg. Sie müssen pydot installieren, damit pydotprintes funktioniert.
Inanc Gumus
21

pydot verwendete eine private Modulvariable (_noncomma) aus pyparsing. Das folgende Diff behebt es für Pyparsing 2.0.1:

diff --git a/dot_parser.py b/dot_parser.py
index dedd61a..138d152 100644
--- a/dot_parser.py
+++ b/dot_parser.py
@@ -25,8 +25,9 @@ from pyparsing import __version__ as pyparsing_version
 from pyparsing import ( nestedExpr, Literal, CaselessLiteral, Word, Upcase, OneOrMore, ZeroOrMore,
     Forward, NotAny, delimitedList, oneOf, Group, Optional, Combine, alphas, nums,
     restOfLine, cStyleComment, nums, alphanums, printables, empty, quotedString,
-    ParseException, ParseResults, CharsNotIn, _noncomma, dblQuotedString, QuotedString, ParserElement )
+    ParseException, ParseResults, CharsNotIn, dblQuotedString, QuotedString, ParserElement )

+_noncomma = "".join( [ c for c in printables if c != "," ] )

 class P_AttrList:
Gabi Davar
quelle
2
Der Vollständigkeit halber hier der Problembericht für pydot, der dieses Problem meldet, und der von @Gabi Davar erwähnte Fix.
Jack Kelly
7

Ich gabelte das Pydot-Repository [1], wendete den Gabi Davar-Patch und einige Änderungen an, um Python-3 zu unterstützen. Das Paket ist im PyPI [2] verfügbar.

Prost

David Villa
quelle
1
Die PyPI-Seite scheint nicht verfügbar zu sein. Das ist sehr schade! Irgendwelche Ideen warum?
Dav Clark
Das Pip-Paket scheint kaputt zu sein. pip install...in der Mitte ohne expliziten Fehler fehlgeschlagen. Sieht aus wie das Manifest und die tatsächlichen Dateien nicht übereinstimmen. Ich checke das Git Repo aus und mv README.rst READMEdann python setup.py install. Das hat bei mir funktioniert :-)
Kenji Noguchi
2
Der Link pypi.python.org/pypi/pydot2 ist defekt, pip install pydot2funktioniert aber und dieser Link pypi.python.org/pypi/pydot2/1.0.32 funktioniert.
Mark Mikofski
5

Die Lösung bestand nicht darin, pydot von irgendwoher zu installieren, sondern "python-pydot" aus offiziellen Ubuntu-Repositories.

Sadik
quelle
Stand 25.08.2013 pip install python-pydotfunktioniert bei mir nicht (Distribution nicht gefunden); pip install pydottut. Ich denke also nicht, dass pydotdas notwendigerweise inoffiziell ist. Vielleicht haben Sie stattdessen über eine Betriebssystemdistribution installiert?
Owen S.
5
Nicht mit Pip, sudo apt-get install python-pydothabe es für mich getan.
Sadik
Das würde wahrscheinlich funktionieren, da Ubuntu derzeit python-pyparsing1.5.2 hat, wodurch die oben aufgeführte Inkompatibilität der Version vermieden wird. Ich habe das oben beschriebene Update durchgeführt und seitdem keine Probleme mehr gehabt. Vielen Dank!
Owen S.
1
Leider wurde in Ubuntu ab Saucy Pyparsing aktualisiert, aber Pydot wurde nicht entsprechend gepatcht.
Tully
1
Ich habe ein Ticket eingereicht, um das Ubuntu-Paket zu reparieren: bugs.launchpad.net/ubuntu/+source/pydot/+bug/1321135
Tully
3

Es gibt jetzt mindestens zwei weitere Versionen, die PyParsing-2 und Python-3 unterstützen:

  • PyDotPlus von Carlos Jenkins mit einem schönen Travis Buildbot und einer ausgefallenen Dokumentation . Sie müssen jedoch den Ordnernamen von in ändern site-packages\pydotplus, site-packages\pydotdamit er mit vorhandenen Programmen funktioniert, die pydot importieren.
  • pydot3k von bmcorser . Hat leider nicht funktioniert!
  • prologic / pydot von James Mills verlinkt von der offiziellen pydot Google Codepage als ...

    Ein Zweig für Python 3-Kompatibilität

  • und hier ist ein funktionierender Link zu David Villas pydot2, der gut funktioniert: https://pypi.python.org/pypi/pydot2/1.0.32

Mark Mikofski
quelle
3

Ich hatte das Problem wieder und meine obige Lösung funktionierte nicht. Wenn dies für Sie zutrifft und Sie Anaconda auch auf einem Mac mit El Capitan verwenden, versuchen Sie Folgendes:

conda install --channel https://conda.anaconda.org/RMG graphviz`
conda install --channel https://conda.anaconda.org/RMG pydot
scottlittle
quelle
3

Was ich am Ende nach so vielen Versuchen von dem gemacht habe, was ich hier gesehen habe (Pseudosequenz, damit es für networkx funktioniert):

apt-get remove python-pydot
pip install pydotplus
apt-get install libcgraph6
apt-get install python-pygraphviz


# pip freeze | grep pydot
 pydotplus==2.0.2
# pip freeze | grep pyparsing
pyparsing==2.2.0
# pip freeze | grep graphviz
pygraphviz==1.2
# python -c 'import pydotplus'
#
sten
quelle
2

Dies funktionierte bei mir (Mac OS X 10.9 mit Python 2.7.10 unter Anaconda):

conda uninstall pydot

Dann,

conda install pydot

Pyparsing wird dann bei der Installation von pydot herabgestuft (von 2.x auf 1.5.7). Zukünftige Googler: Dadurch konnte ich Theano korrekt installieren und importieren.

scottlittle
quelle
1

Unter OSX Mavericks hat Folgendes den Trick gemacht ... Ich habe den gleichen Fehler erhalten, aber unten gab es auch eine Beschwerde, dass die ausführbare Datei von graphviz nicht vorhanden war ... Ich denke, das Problem war, dass ich graphviz vor den anderen Modulen installiert hatte?

brew uninstall graphviz
brew install graphviz
ecordo
quelle
1

Wenn andere Lösungen nicht funktionieren, ist dies eine schnelle und schmutzige Methode, um das Problem zu lösen:

Dieses Beispiel stammt aus Python 2.7 unter Ubuntu 16.04.

Bearbeiten Sie die Datei python2.7 / site-packages / keras / utils / visualize_util.py und kommentieren Sie das folgende Codesegment.

if not pydot.find_graphviz():
    raise ImportError('Failed to import pydot. You must install pydot'
                      ' and graphviz for `pydotprint` to work.')

find_graphviz () ist in neueren Versionen von pydot redundant, und der obige Aufruf funktioniert nicht.

Totoro
quelle
1

Ich habe auch das Problem und meinen Pydot == 1.0.28 beim Pyparsing == 2.2.0 getroffen. Ich habe das Problem behoben, indem ich das neueste pydot 1.2.3 (tar.gz) von Google heruntergeladen und dann offline installiert habe. Als ich den Pydot in Ubuntu 14.04 aktualisiert habe, hieß es, der Pydot 1.0.28 sei die neueste Version. Deshalb lade ich von Google die Version 1.2.3 herunter.

Cna
quelle
0

Sie müssen Pyparsing von Version 2.x auf Version 1.5.7 herunterstufen, damit pydot ordnungsgemäß funktioniert.

Für Win-64 mit Conda funktionierte dies für mich:

conda install -c https://conda.anaconda.org/Trentonoliphant pyparsing=1.5.7

Ich habe dann die 2.x-Version deaktiviert / deinstalliert und Pyparsing in meinem Skript neu geladen:

pyparsing = reload(pyparsing)
pydot = reload(pydot)

So überprüfen Sie, ob die richtige Version ausgeführt wird:

print pyparsing.__version__
Sander van den Oord
quelle