Error de pydot y graphviz: no se pudo importar dot_parser, la carga de archivos dot no será posible


107

Cuando ejecuto un código muy simple 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')

Me imprime el mensaje de error:

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

Estoy usando python 2.7.3


6
pip install pydot2debería solucionar este problema. Mucho mejor que usarlo pip uninstallporque si comparte código puede agregar pydot2 a su requirements.txt y no dejar que los usuarios ejecuten comandos desconocidos.
RussellStewart

Respuestas:


220

Respuesta por pydot >= 1.1:

La incompatibilidad de (upstream) pydotha sido corregida por 6dff94b3f1 y, por pydot >= 1.1lo tanto , será compatible conpyparsing >= 1.5.7 .


Respuesta aplicable a pydot <= 1.0.28:

Para cualquier otra persona que se encuentre con esto, se debe a los cambios en pyparsing de 1.xa la versión 2.x. Para instalar pydot usando pip, primero instale la versión anterior de pyparsing:

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

Si no lo instaló pyparsingusando pip, sino que lo usó setup.py, eche un vistazo a esta solución para desinstalar el paquete. Gracias @qtips.


1
Instalé NetworkX, GraphViz y pydot, pero no pude conseguir que la funcionalidad Graphviz funcionara con NetworkX (por ejemplo, este ejemplo de NetworkX falló). Seguí obteniendo: el nombre global 'dot_parser' no está definido . Tu solución resolvió este problema.
qtips

1
Además, sudo pip uninstallno funciona si ha instalado su paquete usando python setup.py installen ese caso, siga esta solución. Este fue al menos el caso en mi Mac Mountain Lion OSX
qtips

sudoobviamente no siempre es necesario, como si estuviera usando un virtualenv. Aparte de eso, ¡esto funcionó para mí!
David Reynolds

En Ubuntu 12.04 obtengo este error, al instalar analizando: "Solicitud de pyparsing == 1.5.7, pero instalando la versión 2.0.1". Entonces, el error anterior todavía ocurre Así que la solución fue especificar la ubicación de descarga del huevo de Python: sudo pip install -Iv pypi.python.org/packages/source/p/pyparsing/…
lefterav

45
¿Por qué no simplemente pip install pyparsing==1.5.7?
Suor

57

Hay un nuevo paquete en el repositorio pip llamado pydot2 que funciona correctamente con pyparsing2. No pude degradar mis paquetes porque matplotlib depende del paquete pyparsing más nuevo.

Nota: python2.7 de macports


7
En mi humilde opinión, esta respuesta debe considerarse sobre la idea de degradación de pyparsing. También me funciona perfectamente con networkx. Gracias !
Raghav RV

Sigue dando este error pero el error dot_parser desapareció. Debe instalar pydot para pydotprintque funcione.
Inanc Gumus

21

pydot usó una variable de módulo privada (_noncomma) de pyparsing. La siguiente diferencia lo corrige para usarlo en 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 para completar, aquí está el informe de problemas de pydot que informa este problema y la solución mencionada por @Gabi Davar.
Jack Kelly

7

Bifurqué el repositorio de pydot [1], apliqué el parche de Gabi Davar y algunos cambios para admitir python-3. El paquete está disponible en PyPI [2].

Salud


1
La página de PyPI parece estar inactiva. ¡Eso es muy malo! ¿Alguna idea de por qué?
Dav Clark

el paquete de pip parece estar roto. pip install...falló en el medio sin error explícito. Parece que el manifiesto y los archivos reales no coinciden. Reviso el repositorio de git y mv README.rst READMEluego python setup.py install. Esto funcionó para mí :-)
Kenji Noguchi

2
el enlace, pypi.python.org/pypi/pydot2 , está roto pero pip install pydot2funciona y este enlace, pypi.python.org/pypi/pydot2/1.0.32 , funciona.
Mark Mikofski


5

La solución no fue instalar pydot desde algún lugar, sino "python-pydot" desde los repositorios oficiales de ubuntu.


A partir del 25 de agosto de 2013 pip install python-pydotno me funciona (no se encontró la distribución); pip install pydothace. Así que no creo que pydotsea ​​necesariamente extraoficial. ¿Quizás estaba instalando a través de una distribución de sistema operativo?
Owen S.

5
No con pip, lo sudo apt-get install python-pydothice por mí.
Sadik

Eso probablemente funcionaría porque Ubuntu tiene actualmente python-pyparsingen 1.5.2, lo que evita la incompatibilidad de versiones mencionada anteriormente. Fui con la solución anterior y no he tenido problemas desde entonces. ¡Gracias!
Owen S.

1
Desafortunadamente, en Ubuntu a partir de Saucy, el pyparsing se ha actualizado, pero pydot no se ha parcheado adecuadamente.
Tully


3

Ahora hay al menos 2 versiones más que parecen ser compatibles con PyParsing-2 y Python-3:

  • PyDotPlus de Carlos Jenkins con un simpático robot de compilación de Travis y documentación sofisticada . Sin embargo, deberá cambiar el nombre de la carpeta de site-packages\pydotplusa site-packages\pydotpara que funcione con los programas existentes que importan pydot.
  • pydot3k por bmcorser . Lamentablemente, ¡no funcionó!
  • prologic / pydot de James Mills vinculado desde la página oficial de códigos de Google pydot como ...

    una rama para la compatibilidad con Python 3

  • y aquí hay un enlace de trabajo al pydot2 de David Villa que funciona bien: https://pypi.python.org/pypi/pydot2/1.0.32


3

Tuve el problema nuevamente y mi solución anterior no funcionó. Si eso es cierto para usted y también está usando Anaconda en una Mac con El Capitan, intente esto:

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

3

Lo que hice al final después de tantos intentos de lo que vi aquí (pseudo secuencia para que funcione para 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

Esto funcionó para mí (Mac OS X 10.9 con Python 2.7.10 en Anaconda):

conda uninstall pydot

Luego,

conda install pydot

Pyparsing luego se degrada (de 2.xa 1.5.7) tras la instalación de pydot. Futuros Googlers: esto me permitió instalar e importar Theano correctamente.


1

En OSX Mavericks lo siguiente funcionó ... Obtuve el mismo error pero en la parte inferior también había una queja de que el ejecutable graphviz no estaba presente ... Creo que el problema fue que había instalado Graphviz antes que los otros módulos.

brew uninstall graphviz
brew install graphviz

1

Cuando otras soluciones no funcionan, este es un método rápido y sucio para resolver el problema:

Este ejemplo es de python 2.7 en Ubuntu 16.04.

Edite el archivo python2.7 / site-packages / keras / utils / visualize_util.py y comente el segmento de código a continuación.

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

find_graphviz () es redundante en las versiones más recientes de pydot y la llamada anterior no funciona.


1

También encontré el problema y mi pydot == 1.0.28 mientras pyparsing == 2.2.0. Solucioné el problema descargando el último pydot 1.2.3 (tar.gz) de Google y luego lo instalé sin conexión. Cuando actualicé pydot en ubuntu 14.04, decía que pydot 1.0.28 es la versión más nueva. Por eso descargo de google la versión 1.2.3.


0

Necesita degradar pyparsing de la versión 2.xa la versión 1.5.7 para que pydot funcione correctamente.

Para win-64, usando Conda, esto funcionó para mí:

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

Luego deshabilité / desinstalé la versión 2.xy recargué pyparsing en mi script:

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

Para comprobar si tiene la versión correcta en ejecución:

print pyparsing.__version__
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.