2013-04-11 4 views
106

Wenn ich einen sehr einfachen Code mit pydot laufenpydot und graphviz Fehler: konnte nicht importiert werden dot_parser, Laden von Punktdateien nicht möglich

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

Er druckt mir die Fehlermeldung:

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

Ich benutze Python 2.7.3

+6

'pip install pydot2' sollte dieses Problem beheben. Viel schöner als die Verwendung von 'pip uninstall', denn wenn Sie Code freigeben, können Sie einfach pydot2 zu Ihrer requirements.txt hinzufügen und nicht, dass Benutzer unbekannte Befehle ausführen. – RussellStewart

Antwort

219

Antwort für pydot >= 1.1:

Die Inkompatibilität von (upstream) von 6dff94b3f1pydot fixiert wurde, und somit wird pydot >= 1.1compatible with pyparsing >= 1.5.7 sein.


Antwort für pydot <= 1.0.28:

Für alle anderen, die über diese kommt, ist es aufgrund der Veränderungen in pyparsing von 1.x auf 2.x Release. So installieren pydot pip verwenden, installieren Sie zuerst die ältere Version von pyparsing:

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

Wenn Sie nicht pyparsingpip mit installiert haben, sondern verwendet stattdessen setup.py, dann an diesem einen Blick solution das Paket zu deinstallieren. Danke @qtips.

+2

Danke für die rechtzeitige Antwort. Ich brauchte es 3 Stunden nachdem du es gepostet hast. – foresightyj

+1

Ich habe NetworkX, GraphViz und Pydot installiert, konnte aber die Graphviz-Funktionalität nicht mit NetworkX arbeiten (z. B. [this] (http://networkx.github.io/documentation/latest/examples/drawing/circular_tree.html). NetworkX-Beispiel fehlgeschlagen). Ich bekam immer: ** globaler Name 'dot_parser' ist nicht definiert **. Ihre Lösung hat dieses Problem gelöst. – qtips

+1

auch, 'sudo pip uninstall' funktioniert nicht, wenn Sie Ihr Paket mit' python setup.py install' installiert haben. Folgen Sie in diesem Fall [this] (http://stackoverflow.com/questions/1550226/python-setup- py-uninstall) Lösung. Dies war zumindest auf meinem Mountain Lion OSX Mac – qtips

5

Die Lösung war nicht, Pydot von irgendwo zu installieren, aber "Python-Pydot" aus offiziellen Ubuntu-Repositories.

+0

Ab dem 25.08.2013 'pip install python-pydot' funktioniert bei mir nicht (Distribution nicht gefunden); 'pip install pydot' tut das. Ich denke also nicht, dass "Pydot" notwendigerweise inoffiziell ist. Vielleicht haben Sie stattdessen über eine Betriebssystemverteilung installiert? –

+5

Nicht mit pip, 'sudo apt-get install python-pydot' hat es für mich gemacht. – Sadik

+0

Das würde wahrscheinlich funktionieren, weil Ubuntu derzeit bei 1.5.2 'python-pyparsing' hat, wodurch die oben aufgelistete Inkompatibilität der Versionen vermieden wird. Ich ging mit dem Fix oben und hatte seitdem keine Probleme mehr. Vielen Dank! –

21

pydot verwendete eine private Modulvariable (_noncomma) von pyparsing. Die unten diff behebt es für pyparsing 2.0.1 zu verwenden:

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: 
+2

Nur der Vollständigkeit halber [hier ist der Problembericht] (http://code.google.com/p/pydot/issues/detail?id = 81 # c9) für pydot, das dieses Problem und den von @Gabi Davar erwähnten Fehler meldet. –

+0

Danke! Vielen Dank!! Ich habe mir dabei den Kopf gebrochen! – Shankar

7

gegabelt ich das pydot Repository [1], die Gabi Davar Patch und einige Änderungen Python-3 unterstützen angewendet. Das Paket ist im PyPI [2] verfügbar.

Prost

+1

Die PyPI-Seite scheint nicht verfügbar zu sein. Das ist sehr schade! Irgendwelche Ideen warum? –

+0

scheint das Pip-Paket kaputt zu sein. 'pip install ...' ist in der Mitte ohne expliziten Fehler fehlgeschlagen. Sieht so aus, als ob das Manifest und die tatsächlichen Dateien nicht übereinstimmen. Ich checke das Git Repo, und 'mv README.rst README' dann 'python setup.py install'. Das funktionierte für mich :-) –

+2

Der Link, https://pypi.python.org/pypi/pydot2, ist defekt, aber 'pip install pydot2' funktioniert und dieser Link, https://pypi.python.org/pypi/ pydot2/1.0.32, funktioniert. –

57

Es ist ein neues Paket in der pip repo genannt pydot2 richtig, die Funktionen mit pyparsing2. Ich konnte meine Pakete nicht herunterstufen, da matplotlib vom neueren Pyparspar-Paket abhängig ist.

Hinweis: python2.7 von Macports

+7

IMHO Diese Antwort sollte über die PIPARSING-Downgrading-Idee betrachtet werden. Funktioniert für mich auch perfekt mit networkx. Vielen Dank ! –

+0

Immer noch diesen Fehler aber dot_parser Fehler gegangen. Sie müssen pydot für 'pydotprint' installieren, um zu funktionieren. –

1

Auf OSX Maverick folgendes hat den Trick ... Ich habe den gleichen Fehler, aber am Ende gibt es auch eine Beschwerde, dass die graphviz ausführbar war nicht vorhanden ... Ich denke, das Problem war, dass ich graphviz vor den anderen Modulen installiert hatte?

brew uninstall graphviz 
brew install graphviz 
+0

das hat nicht für mich funktioniert :( –

+0

arbeitete für MacOS El capitan – Yauhen

+0

Arbeitete für mich auch. TY –

3

Inzwischen gibt es mindestens zwei weitere Versionen, die PyParsing-2 und Python-3 erscheinen unterstützen:

  • PyDotPlus von Carlos Jenkins mit einem schönen travis buildbot und Phantasie documentation. Sie müssen jedoch seinen Ordnernamen von site-packages\pydotplus in site-packages\pydot ändern, damit er mit vorhandenen Programmen funktioniert, die pydot importieren.
  • pydot3k von bmcorser. Leider, hat nicht funktioniert!
  • prologic/pydot von James Mills von der offiziellen pydot Google Code Seite als ...

    a branch for Python 3 compatibility

  • and here is a working link to David Villa's pydot2 which works fine: https://pypi.python.org/pypi/pydot2/1.0.32

2

Das funktionierte für mich (Mac OS X 10.9 mit Python 2.7.10 auf Anaconda):

Dann
conda uninstall pydot 

,

conda install pydot 

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

3

Ich hatte das Problem wieder und meine obige Lösung hat nicht funktioniert. Wenn das wahr ist für Sie, und Sie sind auch mit Anaconda auf einem Mac mit El Capitan, versuchen Sie dies:

conda install --channel https://conda.anaconda.org/RMG graphviz` 
conda install --channel https://conda.anaconda.org/RMG pydot 
0

Sie müssen von Version 2.x auf Version 1.5.7 degradieren pyparsing pydot zu bekommen richtig zu arbeiten .

Für Win-64, mit Conda, das ist für mich gearbeitet:

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

ich dann deaktiviert/die 2.x-Version deinstalliert und neu geladen pyparsing in meinem Skript:

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

Um zu überprüfen, ob Sie die richtige Version ausgeführt haben:

print pyparsing.__version__ 
1

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

Dieses Beispiel ist von Python 2.7 auf Ubuntu 16.04.

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

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

find_graphviz() ist auf neuere Versionen von pydot überflüssig, und der obige Aufruf funktioniert nicht.

2

Was ich am Ende tat nach so vielen Versuchen von dem, was ich hier gesehen (Pseudo-Sequenz, die für es für NetworkX zu arbeiten):

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' 
# 
1

traf ich auch das Problem und meine pydot == 1.0.28 während pyparsing == 2.2.0. 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 das Pydot in Ubuntu 14.04 aktualisierte, sagte es das Pydot 1.0.28 ist die neueste Version. Daher lade ich die 1.2.3 Version von google herunter.

Verwandte Themen