Errore pydot e graphviz: impossibile importare dot_parser, il caricamento dei file dot non sarà possibile


107

Quando eseguo un codice molto semplice con pydot

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

Mi stampa il messaggio di errore:

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

Sto usando python 2.7.3


6
pip install pydot2dovrebbe risolvere questo problema. Molto più bello dell'uso pip uninstallperché se condividi il codice puoi semplicemente aggiungere pydot2 al tuo requirements.txt e non consentire agli utenti di eseguire comandi non familiari.
RussellStewart

Risposte:


220

Risposta per pydot >= 1.1:

L'incompatibilità di (upstream) pydotè stata risolta da 6dff94b3f1 e quindi pydot >= 1.1sarà compatibile conpyparsing >= 1.5.7 .


Risposta applicabile a pydot <= 1.0.28:

Per chiunque altro si imbatta in questo, è dovuto ai cambiamenti nel pyparsing dalla versione 1.x alla versione 2.x. Per installare pydot utilizzando pip, installa prima la versione precedente di pyparsing:

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

Se non hai installato pyparsingutilizzando pip, ma invece utilizzato setup.py, dai un'occhiata a questa soluzione per disinstallare il pacchetto. Grazie @qtips.


1
Ho installato NetworkX, GraphViz e pydot, ma non sono riuscito a far funzionare la funzionalità Graphviz con NetworkX (ad esempio, questo esempio di NetworkX non è riuscito). Continuavo a ricevere: il nome globale "dot_parser" non è definito . La tua soluzione ha risolto questo problema.
qtips

1
inoltre, sudo pip uninstallnon funziona se hai installato il pacchetto utilizzando python setup.py installin tal caso, segui questa soluzione. Questo è stato almeno il caso del mio Mac OSX Mountain Lion
qtips

sudoovviamente non è sempre necessario, come se stai usando un virtualenv. Oltre a questo, questo ha funzionato per me!
David Reynolds

In Ubuntu 12.04 ottengo questo errore, durante l'installazione di byparsing: "Richiesto pyparsing == 1.5.7, ma installazione della versione 2.0.1". Quindi l'errore sopra si verifica ancora Quindi la soluzione era specificare il percorso di download dell'uovo di python: sudo pip install -Iv pypi.python.org/packages/source/p/pyparsing/…
lefterav

45
Perché non solo pip install pyparsing==1.5.7?
Suor

57

C'è un nuovo pacchetto nel repository pip chiamato pydot2 che funziona correttamente con pyparsing2. Non ho potuto eseguire il downgrade dei miei pacchetti perché matplotlib dipende dal pacchetto di pyparsing più recente.

Nota: python2.7 da macports


7
IMHO Questa risposta dovrebbe essere considerata sopra l'idea di declassamento pyparsing. Per me funziona perfettamente anche con networkx. Grazie !
Raghav RV

Dando ancora questo errore ma l'errore dot_parser è andato. Devi installare pydot per pydotprintfunzionare.
Inanc Gumus

21

pydot ha utilizzato una variabile del modulo privato (_noncomma) da pyparsing. La differenza di seguito lo risolve da utilizzare per il 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:

2
Solo per completezza, ecco il rapporto sul problema per pydot che segnala questo problema e la correzione menzionata da @Gabi Davar.
Jack Kelly

7

Ho biforcato il repository pydot [1], applicato la patch Gabi Davar e alcune modifiche per supportare python-3. Il pacchetto è disponibile nel PyPI [2].

Saluti


1
La pagina PyPI sembra essere inattiva. Peccato! Qualche idea sul perché?
Dav Clark

il pacchetto pip sembra essere danneggiato. pip install...fallito nel mezzo senza errore esplicito. Sembra che il manifest e i file effettivi non corrispondano. Controllo il repository git e mv README.rst READMEpoi python setup.py install. Questo ha funzionato per me :-)
Kenji Noguchi

2
il collegamento, pypi.python.org/pypi/pydot2 , è rotto ma pip install pydot2funziona e questo collegamento, pypi.python.org/pypi/pydot2/1.0.32 , funziona.
Mark Mikofski


5

La soluzione non era installare pydot da qualche parte, ma "python-pydot" dai repository ufficiali di Ubuntu.


A partire dal 25 agosto 2013 pip install python-pydotnon funziona per me (distribuzione non trovata); pip install pydotlo fa. Quindi non penso che pydotsia necessariamente non ufficiale. Forse stavi installando tramite una distribuzione del sistema operativo invece?
Owen S.

5
Non con pip, l' sudo apt-get install python-pydotho fatto per me.
Sadik

Probabilmente funzionerebbe perché Ubuntu ha attualmente python-pyparsing1.5.2, che evita l'incompatibilità della versione sopra elencata. Sono andato con la correzione sopra e da allora non ho avuto problemi. Grazie!
Owen S.

1
Sfortunatamente in Ubuntu a partire da Saucy il pyparsing è stato aggiornato ma pydot non è stato patchato in modo appropriato.
Tully

1
Ho presentato un ticket per correggere il pacchetto Ubuntu: bugs.launchpad.net/ubuntu/+source/pydot/+bug/1321135
Tully

3

Ora ci sono almeno altre 2 versioni che sembrano supportare PyParsing-2 e Python-3:

  • PyDotPlus di Carlos Jenkins con un bel buildbot di travis e una documentazione di fantasia . Tuttavia, sarà necessario modificare il nome della cartella da site-packages\pydotplusa site-packages\pydotaffinché funzioni con i programmi esistenti che importano pydot.
  • pydot3k di bmcorser . Purtroppo, non ha funzionato!
  • prologic / pydot di James Mills collegato alla code page ufficiale di Google pydot come ...

    un ramo per la compatibilità con Python 3

  • ed ecco un collegamento funzionante al pydot2 di David Villa che funziona bene: https://pypi.python.org/pypi/pydot2/1.0.32


3

Ho avuto di nuovo il problema e la mia soluzione sopra non ha funzionato. Se questo è vero per te e stai anche usando Anaconda su un Mac con El Capitan, prova questo:

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

3

Quello che ho fatto alla fine dopo così tanti tentativi da quello che ho visto qui (pseudo sequenza per farlo funzionare per networkx):

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

2

Questo ha funzionato per me (Mac OS X 10.9 con Python 2.7.10 su Anaconda):

conda uninstall pydot

Poi,

conda install pydot

Il pyparsing viene quindi declassato (da 2.xa 1.5.7) all'installazione di pydot. Future Googler: questo mi ha permesso di installare e importare Theano correttamente.


1

Su OSX Mavericks quanto segue ha fatto il trucco ... Ho ricevuto lo stesso errore ma in fondo c'era anche un reclamo che l'eseguibile di graphviz non era presente ... Penso che il problema fosse che avevo installato graphviz prima degli altri moduli?

brew uninstall graphviz
brew install graphviz

1

Quando altre soluzioni non funzionano, questo è un metodo rapido e sporco per risolvere il problema:

Questo esempio è da python 2.7 su Ubuntu 16.04.

Modifica il file python2.7 / site-packages / keras / utils / visualize_util.py e commenta il segmento di codice di seguito.

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

find_graphviz () è ridondante sulle versioni più recenti di pydot e la chiamata precedente non funziona.


1

Ho anche incontrato il problema e il mio pydot == 1.0.28 durante il pyparsing == 2.2.0. Ho risolto il problema scaricando il nuovissimo pydot 1.2.3 (tar.gz) da google e poi installandolo offline. Quando ho aggiornato il pydot in ubuntu 14.04, ho detto che pydot 1.0.28 è la versione più recente. Quindi scarico da google la versione 1.2.3.


0

È necessario eseguire il downgrade del pyparsing dalla versione 2.x alla versione 1.5.7 per far funzionare correttamente pydot.

Per win-64, usando Conda, questo ha funzionato per me:

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

Ho quindi disabilitato / disinstallato la versione 2.x e ho ricaricato il pyparsing nel mio script:

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

Per verificare se hai la versione corretta in esecuzione:

print pyparsing.__version__
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.