Erreur pydot et graphviz: impossible d'importer dot_parser, le chargement des fichiers dot ne sera pas possible


107

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


6
pip install pydot2devrait résoudre ce problème. Beaucoup plus agréable que d'utiliser, pip uninstallcar si vous partagez du code, vous pouvez simplement ajouter pydot2 à votre requirements.txt et ne pas laisser les utilisateurs exécuter des commandes inconnues.
RussellStewart

Réponses:


220

Réponse pour pydot >= 1.1:

L'incompatibilité de (amont) pydota été corrigée par 6dff94b3f1 , et pydot >= 1.1sera donc compatible avecpyparsing >= 1.5.7 .


Réponse applicable à pydot <= 1.0.28:

Pour quiconque rencontre cela, cela est dû aux changements de pyparsing de 1.x à la version 2.x. Pour installer pydot à l'aide de pip, installez d'abord l'ancienne version de pyparsing:

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

Si vous n'avez pas installé en pyparsingutilisant pip, mais que vous l'avez utilisé setup.py, jetez un œil à cette solution pour désinstaller le package. Merci @qtips.


1
J'ai installé NetworkX, GraphViz et pydot, mais je n'ai pas pu faire fonctionner la fonctionnalité Graphviz avec NetworkX (par exemple, cet exemple de NetworkX a échoué). J'ai continué à obtenir: le nom global «dot_parser» n'est pas défini . Votre solution a résolu ce problème.
qtips

1
également, sudo pip uninstallne fonctionne pas si vous avez installé votre package en utilisant python setup.py installdans ce cas, suivez cette solution. C'était au moins le cas sur mon Mac OSX Mountain Lion
qtips

sudon'est évidemment pas toujours nécessaire, comme si vous utilisez un virtualenv. A part ça, cela a fonctionné pour moi!
David Reynolds

Dans Ubuntu 12.04, j'obtiens cette erreur, lors de l'installation en analysant: "Pyparsing demandé == 1.5.7, mais en installant la version 2.0.1". Ensuite, l'erreur ci-dessus se produit toujours.La solution était donc de spécifier l'emplacement de téléchargement de l'œuf python: sudo pip install -Iv pypi.python.org/packages/source/p/pyparsing
...

45
Pourquoi pas juste pip install pyparsing==1.5.7?
Suor

57

Il existe un nouveau package dans le repo pip appelé pydot2 qui fonctionne correctement avec pyparsing2. Je n'ai pas pu rétrograder mes packages car matplotlib dépend du nouveau package pyparsing.

Remarque: python2.7 de macports


7
IMHO Cette réponse devrait être considérée au cours de l'idée de déclassement pyparsing. Fonctionne parfaitement pour moi avec networkx aussi. Merci !
Raghav RV

Donne toujours cette erreur mais l'erreur dot_parser a disparu. Vous devez installer pydot pour pydotprinttravailler.
Inanc Gumus

21

pydot a utilisé une variable de module privé (_noncomma) 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:

2
Pour être complet, voici le rapport de problème pour pydot qui signale ce problème et le correctif mentionné par @Gabi Davar.
Jack Kelly

7

J'ai bifurqué le référentiel pydot [1], appliqué le patch Gabi Davar et quelques modifications pour prendre en charge python-3. Le package est disponible dans le PyPI [2].

À votre santé


1
La page PyPI semble être en panne. C'est dommage! Des idées pourquoi?
Dav Clark

le paquet pip semble être cassé. pip install...échoué au milieu sans erreur explicite. Il semble que le manifeste et les fichiers réels ne correspondent pas. Je vérifie le repo git, mv README.rst READMEpuis python setup.py install. Cela a fonctionné pour moi :-)
Kenji Noguchi

2
le lien, pypi.python.org/pypi/pydot2 , est cassé mais pip install pydot2fonctionne et ce lien, pypi.python.org/pypi/pydot2/1.0.32 , fonctionne.
Mark Mikofski


5

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


Depuis le 25 août 2013 pip install python-pydotne fonctionne pas pour moi (distribution non trouvée); pip install pydotEst-ce que. Alors je ne pense pas que ce soit çapydot soit nécessairement officieux. Peut-être que vous installiez plutôt via une distribution OS?
Owen S.

5
Pas avec pip, sudo apt-get install python-pydotje l'ai fait pour moi.
Sadik

Cela fonctionnerait probablement car Ubuntu a actuellement python-pyparsingà 1.5.2, ce qui évite l'incompatibilité de version répertoriée ci-dessus. J'ai choisi le correctif ci-dessus et je n'ai pas eu de problèmes depuis. Merci!
Owen S.

1
Malheureusement dans Ubuntu à partir de Saucy, pyparsing a été mis à jour mais pydot n'a pas été corrigé correctement.
Tully

1
J'ai déposé un ticket pour réparer le paquet Ubuntu: bugs.launchpad.net/ubuntu/+source/pydot/+bug/1321135
Tully

3

Il existe maintenant au moins 2 autres versions qui semblent prendre en charge PyParsing-2 et Python-3:

  • PyDotPlus de Carlos Jenkins avec un bon robot de construction de travis et une documentation sophistiquée . Cependant, vous devrez changer son nom de dossier de site-packages\pydotplusà site-packages\pydotpour qu'il fonctionne avec les programmes existants qui importent pydot.
  • pydot3k par bmcorser . Malheureusement, n'a pas fonctionné!
  • prologic / pydot par James Mills lié à de la page de code officielle de Google pydot comme ...

    une branche pour la compatibilité Python 3

  • et voici un lien de travail vers le pydot2 de David Villa qui fonctionne très bien: https://pypi.python.org/pypi/pydot2/1.0.32


3

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

Ce que j'ai fait à la fin après tant d'essais d'après ce que j'ai vu ici (pseudo séquence pour que cela 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

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 rétrogradé (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.


1

Sur OSX Mavericks, ce qui suit a fait l'affaire ... J'ai eu la même erreur mais en bas il y avait aussi une plainte que 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

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

Cet exemple provient de python 2.7 sur Ubuntu 16.04.

Modifiez 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 nouvelles versions de pydot, et l'appel ci-dessus ne fonctionne pas.


1

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. Quand j'ai mis à jour le pydot dans ubuntu 14.04, il a dit que le pydot 1.0.28 était la dernière version. Par conséquent, je télécharge sur google la version 1.2.3.


0

Vous devez rétrograder pyparsing de la version 2.x à 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 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__
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.