erreur pydot et graphviz: impossible d'importer l'analyseur de points, le chargement de fichiers de points ne sera pas possible

quand j'exécute un code très simple avec 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')

il m'imprime le message d'erreur:

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

j'utilise python 2.7.3

107
demandé sur Sadik 2013-04-11 18:42:43

14 réponses

Réponse pydot >= 1.1 :

l'incompatibilité de (en amont) pydot a été fixée par 6dff94b3f1 , et donc pydot >= 1.1 sera compatible avec pyparsing >= 1.5.7 .


réponse applicable à pydot <= 1.0.28 :

pour toute autre personne qui tombe sur ceci, c'est dû aux changements de pyparsing de 1.x pour les 2.x version. De installer pydot en utilisant pip, d'abord installer l'ancienne version de pyparsing:

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

si vous n'avez pas installé pyparsing en utilisant pip , mais plutôt utilisé setup.py , alors jetez un oeil à cette solution pour désinstaller le paquet. Merci @qtips.

220
répondu Jonathan 2017-05-23 12:34:33

il y a un nouveau paquet dans le PIP repo appelé pydot2 qui fonctionne correctement avec pyparsing2. Je n'ai pas pu déclasser mes paquets parce que matplotlib dépend du nouveau paquet pyparsing.

Note: python2.7 de macports

57
répondu Dana the Sane 2014-04-11 20:08:20

pydot utilisé une variable de module privé (_noncomma) de pyparsing. La différence ci-dessous la fixe à utiliser pour 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:
21
répondu Gabi Davar 2013-08-31 11:49:44

$ sudo pip uninstall pydot

$ sudo pip install pydot2

voir le lien suivant: http://infidea.net/troubleshooting-couldnt-import-dot_parser-loading-of-dot-files-will-not-be-possible/

7
répondu Jing Zhang 2015-06-29 05:04:32

j'ai bifurqué le dépôt pydot [1], appliqué le patch Gabi Davar et quelques modifications pour supporter python-3. Le paquet est disponible dans le PyPI [2].

Cheers

7
répondu david villa 2016-05-11 00:58:46

la solution n'était pas d'installer pydot à partir de quelque part, mais" python-pydot " à partir de dépôts ubuntu officiels.

5
répondu Sadik 2013-08-25 20:40:36

il y a maintenant au moins 2 autres versions qui semblent supporter PyParsing-2 et Python-3:

3
répondu Mark Mikofski 2015-02-17 20:05:12

j'ai eu le problème à nouveau et ma solution ci-dessus n'a pas fonctionné. Si cela est vrai pour vous et que vous utilisez aussi Anaconda sur un Mac avec El Capitan, essayez ceci:

conda install --channel https://conda.anaconda.org/RMG graphviz`
conda install --channel https://conda.anaconda.org/RMG pydot
3
répondu scottlittle 2016-01-28 02:57:37

cela a fonctionné pour moi (Mac OS X 10.9 avec Python 2.7.10 sur Anaconda):

conda uninstall pydot

Puis,

conda install pydot

Pyparsing est ensuite déclassé (à partir de 2.x à 1.5.7) lors de l'installation de pydot. Futurs Googleurs: cela m'a permis d'installer et d'importer Theano correctement.

2
répondu scottlittle 2015-08-10 01:29:17

ce que j'ai fait à la fin après tant d'essais à partir de ce que j'ai vu ici (pseudo séquence pour qu'il fonctionne pour 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
répondu user1019129 2017-09-15 21:23:25

Sur OSX Mavericks, la suite fait le tour... J'ai eu la même erreur mais en bas il y avait aussi une plainte que l'exécutable de graphviz n'était pas présent... Je pense que le problème est que j'avais installé graphviz avant les autres modules?

brew uninstall graphviz
brew install graphviz
1
répondu ecordo 2015-01-14 14:58:09

quand d'autres solutions ne fonctionnent pas, c'est une méthode rapide et sale pour résoudre le probem:

cet exemple est de python 2.7 sur Ubuntu 16.04.

éditer le fichier python2.7/site-packages/keras/utils/visualize_util.py et commenter le segment de code ci-dessous.

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

find_graphviz() est redondant sur les nouvelles versions de pydot, et l'appel ci-dessus ne fonctionne pas.

1
répondu Totoro 2017-03-01 07:02:05

j'ai aussi rencontré le problème et mon pydot==1.0.28 tout pyparsing==2.2.0. J'ai corrigé le problème en téléchargeant le plus récent pydot 1.2.3(tar.gz) de google et ensuite l'installer hors ligne. Lorsque j'ai mis à jour le pydot dans ubuntu 14.04, il est dit que le pydot 1.0.28 est la version la plus récente. Par conséquent, je télécharge à partir de google la version 1.2.3.

1
répondu Cna 2017-12-24 11:49:33

vous devez déclasser pyparsing de la version 2.x vers la version 1.5.7 pour que pydot fonctionne correctement.

Pour win-64, en utilisant Conda, cela a fonctionné pour moi:

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

j'ai alors désactivé/désinstallé le 2.version x et rechargé pyparsing dans mon script:

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

pour vérifier si vous avez la bonne version:

print pyparsing.__version__
0
répondu Sander van den Oord 2016-04-14 08:42:19