2013-04-11 3 views
106

Когда я бегу очень простой код с pydotpydot и Graphviz ошибка: Не удалось импортировать dot_parser, загрузка файлов точек будет невозможно

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

Он печатает мне сообщение об ошибке:

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

Я использую python 2.7.3

+6

'pip install pydot2' должен исправить эту проблему. Намного лучше, чем использовать 'pip uninstall', потому что, если вы используете общий код, вы можете просто добавить pydot2 в свой файл требований.txt и не иметь пользователей запускать незнакомые команды. – RussellStewart

ответ

219

Ответ на pydot >= 1.1:

Несовместимость (вверх по течению) pydot было зафиксировано 6dff94b3f1, и, таким образом pydot >= 1.1 будет compatible with pyparsing >= 1.5.7.


Ответ применимы к pydot <= 1.0.28:

Для всех, кто попадается на это, это связано с изменениями в Pyparsing от 1.x до выпуска 2.x. Чтобы установить pydot с помощью пип, сначала установить более старую версию Pyparsing:

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

Если вы не установили pyparsing с помощью pip, но вместо этого используется setup.py, то есть смотреть на эту solution деинсталлировать пакет. Спасибо @qtips.

+2

Спасибо за своевременный ответ. Мне нужно было это через 3 часа после того, как вы разместили его. – foresightyj

+1

Я установил NetworkX, GraphViz и pydot, но не смог получить функциональность Graphviz для работы с NetworkX (например, [this] (http://networkx.github.io/documentation/latest/examples/drawing/circular_tree.html). Ошибка примера NetworkX). Я продолжал получать: ** глобальное имя «dot_parser» не определено **. Ваше решение решило эту проблему. – qtips

+1

также, 'sudo pip uninstall' не работает, если вы установили свой пакет с помощью' python setup.py install' в этом случае, следуйте [this] (http://stackoverflow.com/questions/1550226/python-setup- py-uninstall). Это было, по крайней мере, на моем Mountain Lion OSX Mac – qtips

5

Решение не должно было устанавливать pydot откуда-то, но «python-pydot» из официальных репозиториев ubuntu.

+0

Начиная с 25 августа 2013 г. «pip install python-pydot» не работает для меня (дистрибутив не найден); 'pip install pydot' делает. Поэтому я не думаю, что 'pydot' обязательно является неофициальным. Возможно, вы устанавливали через дистрибутив ОС? –

+5

Не с пипсом, 'sudo apt-get install python-pydot' сделал это для меня. – Sadik

+0

Возможно, это работает, потому что Ubuntu в настоящее время имеет «python-pyparsing» в 1.5.2, что позволяет избежать несовместимости версии, указанной выше. Я пошел с исправлением выше, и с тех пор у меня не было проблем. Благодаря! –

21

pydot использовал частную переменную модуля (_noncomma) от pyparsing. Ниже дифференциал фиксирует его использовать для 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

Просто для полноты, [вот отчет о проблеме] (http://code.google.com/p/pydot/issues/detail?id = 81 # c9) для pydot, который сообщает об этой проблеме и исправлении, упомянутом @Gabi Davar. –

+0

Спасибо! благодаря!! Я обманывал это! – Shankar

7

Я раздвоенное хранилище pydot [1], применяется патч Габи Давар и некоторые изменения для поддержки Python-3. Пакет доступен в PyPI [2].

Приветствия

+1

Возможно, страница PyPI не работает. Это очень плохо! Любые идеи почему? –

+0

Упаковка пакета кажется сломанной. 'pip install ...' провалился в середине без явной ошибки. Похоже, что манифест и фактические файлы не совпадают. Я проверяю git repo и 'mv README.rst README', затем' python setup.py install'. Это сработало для меня :-) –

+2

ссылка, https://pypi.python.org/pypi/pydot2, сломана, но «pip install pydot2» работает, и эта ссылка https://pypi.python.org/pypi/ pydot2/1.0.32, работает. –

57

Существует новый пакет в пип репо под названием pydot2, что работает правильно с pyparsing2. Я не мог понизить мои пакеты, потому что matplotlib зависит от нового пакета pyparsing.

Примечание: python2.7 из MacPorts

+7

ИМХО. Этот ответ следует рассматривать по сравнению с идеей понижающего представления о пирафинге. Работает для меня отлично с networkx тоже. Благодаря ! –

+0

Ошибка при передаче этой ошибки, но ошибка dot_parser. Вы должны установить pydot для 'pydotprint' для работы. –

1

На OSX Mavericks следующий сделал трюк ... Я получил ту же ошибку, но в нижней части была также жалобы о том, что Graphviz исполняемый файл не присутствовал ... Я думаю, проблема в том, что я установил graphviz перед другими модулями?

brew uninstall graphviz 
brew install graphviz 
+0

это не сработало для меня :( –

+0

работал для MacOS El capitan – Yauhen

+0

Работал для меня тоже. TY –

3

Есть теперь по крайней мере еще 2 версии, которые появляются для поддержки Pyparsing-2 и Python-3:

  • PyDotPlus по Carlos Jenkins с хорошим Travis BuildBot и фантазии documentation. Однако вам нужно будет изменить его имя папки от site-packages\pydotplus до site-packages\pydot, чтобы он работал с существующими программами, которые импортируют pydot.
  • pydot3k by bmcorser. К сожалению, не работает!
  • prologic/pydot Джеймс Миллс ссылку с официальной pydot кодовой страницы Google, как ...

    a branch for Python 3 compatibility

  • and here is a working link to David Villa's pydot2 which works fine: https://pypi.python.org/pypi/pydot2/1.0.32

2

Это работало для меня (Mac OS X 10.9 с Python 2.7.10 на Anaconda):

conda uninstall pydot 

Затем

conda install pydot 

Pyparsing затем понижен (от 2.x до 1.5.7) после установки pydot в. Future Googlers: это позволило мне правильно установить и импортировать Theano.

3

У меня была проблема снова, и мое решение выше не срабатывало. Если это верно для вас, и вы также используете Anaconda на Mac с El Capitan, попробуйте следующее:

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

Вам нужно понизить Pyparsing версии 2.х до версии 1.5.7, чтобы получить pydot правильно работать ,

Для Win-64, используя в Конда, это работает для меня:

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

Затем я отключил/деинсталлировать версию 2.x и перезагружается Pyparsing в моем сценарии:

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

Чтобы проверить есть ли у вас правильная версия:

1

Когда другие решения не работают, это быстрый и грязный метод для решения проблемы:

Этот пример из python 2.7 на Ubuntu 16.04.

Редактировать файл python2.7/site-packages/keras/utils/visualize_util.py и прокомментировать сегмент кода ниже.

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

find_graphviz() является излишним в новых версиях pydot и выше вызов не работает.

2

То, что я сделал в конце после стольких попыток от того, что я видел здесь (псевдо последовательности для того, чтобы работать на 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' 
# 
1

я встретил эту проблему и мой pydot == 1.0.28 в то время как pyparsing == 2.2.0. Я исправил проблему, загрузив новую версию pydot 1.2.3 (tar.gz) из Google, а затем установил ее в автономном режиме. Когда я обновил pydot в ubuntu 14.04, он сказал, что pydot 1.0.28 - самая новая версия. Поэтому я загружаю из версии google 1.2.3.