web-dev-qa-db-fra.com

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

Quand je lance 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
Sadik

Répondez pour pydot >= 1.1:

L’incompatibilité de (amont) pydot a été corrigée par 6dff94b3f1 , et donc pydot >= 1.1 sera compatible avec pyparsing >= 1.5.7 .


Réponse applicable à pydot <= 1.0.28:

Pour ceux qui y croient, cela est dû aux changements de pyparsing de la version 1.x à la version 2.x. Pour installer pydot à l’aide de pip, commencez par 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 à l'aide de pip, vous avez plutôt utilisé setup.py _, alors regardez ceci solution pour désinstaller le paquet. Merci @ qtips.

220
Jonathan

Il existe un nouveau paquet dans le référentiel pip appelé pydot2 qui fonctionne correctement avec pyparsing2. Je ne pouvais pas rétrograder mes paquets car matplotlib dépend du dernier paquet pyparsing.

Note: python2.7 à partir de macports

57
Dana the Sane

pydot a utilisé une variable de module privé (_noncomma) issue de pyparsing. Le diff ci-dessous le corrige à 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
Gabi Davar

J'ai créé le dépôt pydot [1], appliqué le correctif Gabi Davar et apporté quelques modifications pour prendre en charge python-3. Le paquet est disponible dans le PyPI [2].

À votre santé

7
david villa

$ 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/

6
Jing Zhang

La solution ne consistait pas à installer pydot quelque part, mais "python-pydot" à partir des dépôts officiels d'ubuntu.

5
Sadik

J'ai eu à nouveau le problème et ma solution ci-dessus n'a pas fonctionné. Si cela est vrai pour vous et que vous utilisez également 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
scottlittle

Il y a maintenant au moins 2 versions supplémentaires qui semblent supporter PyParsing-2 et Python-3:

  • PyDotPlus par Carlos Jenkins avec un buildbot de Nice travis et fantaisie documentation . Cependant, vous devrez changer son nom de dossier de site-packages\pydotplus à site-packages\pydot pour qu'il fonctionne avec les programmes existants qui importent pydot.
  • pydot3k par bmcorser . Malheureusement, cela n'a pas fonctionné!
  • prologic/pydot par James Mills lié à de la page de code officielle de pydot Google en tant que ...

    une branche pour Python 3

  • et voici un lien de travail vers pydot2 de David Villa qui fonctionne bien: https://pypi.python.org/pypi/pydot2/1.0.32
3
Mark Mikofski

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

conda uninstall pydot

Ensuite,

conda install pydot

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

2
scottlittle

Ce que j’ai fait à la fin après tant d’essais de ce que j’ai vu ici (pseudo séquence pour que ça marche 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
sten

J'ai également rencontré le problème et mon pydot == 1.0.28 en pyparsing == 2.2.0. J'ai résolu le problème en téléchargeant le dernier pydot 1.2.3 (tar.gz) à partir de Google, puis en l'installant hors ligne. Lorsque j'ai mis à jour le pydot dans Ubuntu 14.04, il était indiqué que le pydot 1.0.28 était la version la plus récente. Par conséquent, je télécharge sur Google la version 1.2.3.

1
Cna

Sur OSX Mavericks, le truc suivant a fonctionné ... J'ai eu la même erreur, mais au bas de la page, il y avait aussi une plainte selon laquelle l'exécutable Graphviz n'était pas présent ... Je pense que le problème était que j'avais installé Graphviz avant les autres modules?

brew uninstall graphviz
brew install graphviz
1
ecordo

Lorsque les autres solutions ne fonctionnent pas, il s'agit d'une méthode rapide et compliquée pour résoudre le problème:

Cet exemple est tiré de python 2.7 sur Ubuntu 16.04.

Editez le fichier python2.7/site-packages/keras/utils/visualize_util.py et commentez 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 versions les plus récentes de pydot, et l'appel ci-dessus ne fonctionne pas.

1
Totoro

Vous devez rétrograder la version 2.x de la version 2.x vers la version 1.5.7 pour que pydot fonctionne correctement.

Pour Win-64, avec Conda, cela a fonctionné pour moi:

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

J'ai ensuite désactivé/désinstallé la version 2.x et rechargé pyparsing dans mon script:

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

Pour vérifier si vous avez la bonne version en cours d'exécution:

print pyparsing.__version__
0