Ошибка pydot и graphviz: не удалось импортировать dot_parser, загрузка файлов точек будет невозможна


107

Когда я запускаю очень простой код с помощью 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')

Он выводит мне сообщение об ошибке:

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

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


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

Ответы:


220

Ответ для pydot >= 1.1:

Несовместимость (восходящего потока) pydotбыла исправлена 6dff94b3f1 , и поэтому pydot >= 1.1будет совместим сpyparsing >= 1.5.7 .


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

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

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

Если вы не устанавливали pyparsingusing pip, а использовали вместо этого setup.py, ознакомьтесь с этим решением, чтобы удалить пакет. Спасибо @qtips.


1
Я установил NetworkX, GraphViz и pydot, но не смог заставить функциональность Graphviz работать с NetworkX (например, этот пример NetworkX не удался). Я все время получал: глобальное имя dot_parser не определено . Ваше решение решило эту проблему.
— qtips

1
также sudo pip uninstallне работает, если вы установили свой пакет, используя python setup.py installв этом случае, следуйте этому решению. По крайней мере, так было на моем Mac Mountain Lion OSX
— qtips

sudoочевидно, не всегда необходимо, например, если вы используете virtualenv. Кроме этого, у меня это сработало!
— Дэвид Рейнольдс

В Ubuntu 12.04 я получаю эту ошибку при установке обхода: «Запрошен pyparsing == 1.5.7, но устанавливается версия 2.0.1». Тогда ошибка, указанная выше, все еще возникает. Итак, решение заключалось в том, чтобы указать место загрузки яйца python: sudo pip install -Iv pypi.python.org/packages/source/p/pyparsing/…
— lefterav

45
Почему не просто так pip install pyparsing==1.5.7?
— Suor

57

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

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


7
IMHO Этот ответ следует учитывать по сравнению с идеей понижения версии pyparsing. У меня тоже отлично работает с networkx. Спасибо !
— Raghav RV

По-прежнему выдает эту ошибку, но ошибка dot_parser исчезла. Вы должны установить pydot для pydotprintработы.
— Inanc Gumus

21

pydot использовал частную переменную модуля (_noncomma) из pyparsing. Приведенный ниже diff исправляет его для использования для 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
Просто для полноты, вот отчет о проблеме для pydot, в котором сообщается об этой проблеме и исправлении, упомянутом @Gabi Davar.
— Джек Келли

7

Я разветвил репозиторий pydot [1], применил патч Gabi Davar и некоторые изменения для поддержки python-3. Пакет доступен в PyPI [2].

Ура


1
Страница PyPI не работает. Это очень плохо! Есть идеи, почему?
— Dav Clark

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

2
ссылка pypi.python.org/pypi/pydot2 не pip install pydot2работает, но работает, и эта ссылка, pypi.python.org/pypi/pydot2/1.0.32 , работает.
— Марк Микофски


5

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


По состоянию на 25.08.2013 pip install python-pydotу меня не работает (раздача не найдена); pip install pydotделает. Так что я не думаю, что pydotэто обязательно неофициально. Возможно, вы вместо этого выполняли установку через дистрибутив ОС?
— Оуэн С.

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

Это, вероятно, сработает, потому что в настоящее время Ubuntu имеет python-pyparsingверсию 1.5.2, что позволяет избежать несовместимости версий, перечисленных выше. Я использовал исправление, указанное выше, и с тех пор проблем не было. Спасибо!
— Оуэн С.

1
К сожалению, в Ubuntu, начиная с Saucy, pyparsing был обновлен, но pydot не был исправлен соответствующим образом.
— Талли

1
Я подал заявку на исправление пакета Ubuntu: bugs.launchpad.net/ubuntu/+source/pydot/+bug/1321135
— Талли,

3

Сейчас есть как минимум еще две версии, которые поддерживают PyParsing-2 и Python-3:

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

    ветка для совместимости с Python 3

  • и вот рабочая ссылка на pydot2 Дэвида Виллы, которая отлично работает: https://pypi.python.org/pypi/pydot2/1.0.32


3

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

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

3

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

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

conda uninstall pydot

Затем,

conda install pydot

Затем Pyparsing понижается (с 2.x до 1.5.7) после установки pydot. Будущие гуглеры: это позволило мне правильно установить и импортировать Theano.


1

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

brew uninstall graphviz
brew install graphviz

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, и вышеуказанный вызов не работает.


1

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


0

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

Для win-64 с использованием Conda это сработало для меня:

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

Затем я отключил / удалил версию 2.x и перезагрузил pyparsing в свой скрипт:

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

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

print pyparsing.__version__
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.