помилка 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 до своїх вимог.txt і не мати користувачів, які виконують незнайомі команди.
RussellStewart

Відповіді:


220

Відповідь за pydot >= 1.1:

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


Відповідь, що стосується pydot <= 1.0.28:

Для всіх, хто стикається з цим, це пов’язано зі змінами піпарсингу від 1.x до 2.x випуску. Щоб встановити pydot за допомогою pip, спочатку встановіть старішу версію pyparsing:

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

Якщо ви не встановили pyparsingза допомогою pip, а замість цього використовувались setup.py, перегляньте це рішення для видалення пакета. Дякуємо @qtips.


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

1
також sudo pip uninstallне працює, якщо ви встановили свій пакет, використовуючи python setup.py installв цьому випадку, дотримуйтесь цього рішення. Так було принаймні на моєму Mountain Lion OSX Mac
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

У ppo-репо є новий пакет під назвою pydot2, який правильно працює з pyparsing2. Я не зміг знизити свої пакунки, оскільки matplotlib залежить від нового пакету pyparsing.

Примітка: python2.7 з макпортів


7
ІМХО Цю відповідь слід розглядати у зв'язку із суттєвою деградацією ідеї. Мені ідеально підходить і з networkx. Дякую !
Рагхав Р. В.

Ця помилка все ще надається, але помилка dot_parser зникла. Ви повинні встановити pydot для pydotprintроботи.
Inanc Gumus

21

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

7

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

Ура


1
Сторінка PyPI видається вниз. Це дуже погано! Будь-які ідеї чому?
Дав Кларк

пакет піп, здається, зламаний. pip install...не вдалося в середині без явної помилки. Схоже, маніфест і фактичні файли не збігаються. Я перевіряю git repo, а mv README.rst READMEпотім python setup.py install. Це працювало для мене :-)
Кенджі Ногучі

2
посилання pypi.python.org/pypi/pydot2 не pip install pydot2працює, але працює, і це посилання, pypi.python.org/pypi/pydot2/1.0.32 , працює.
Марк Мікофський

6

$ sudo pip uninstall pydot

$ sudo pip install pydot2

Дивіться наступне посилання: http://infidea.net/troubleshooting-couldnt-import-dot_parser-loading-of-dot-files-will-not-be-possible/


Я зробив навпаки, pip uninstall pydot2а потім pip install pydotвиправити помилку. Ось посилання на правильну відповідь: github.com/pydot/pydot/isissue/166#issuecomment-356066120
FooBar167

5

Рішенням було не встановлення pydot звідкись, а "python-pydot" з офіційних сховищ ubuntu.


Станом на 25 серпня 2013 року pip install python-pydotдля мене не працює (розповсюдження не знайдено); pip install pydotробить. Тож я не думаю, що pydotце необов’язково неофіційно. Можливо, замість цього ви встановлювали через дистрибутив ОС?
Оуен С.

5
Не з піп, sudo apt-get install python-pydotзробив це для мене.
Садик

Це, мабуть, спрацює, тому що Ubuntu наразі має python-pyparsingверсію 1.5.2, що дозволяє уникнути несумісності версій, перелічених вище. Я пішов з виправленням вище і з тих пір не мав проблем. Дякую!
Оуен С.

1
На жаль, в Ubuntu станом на Saucy піпарінг був модернізований, але підот не був зафіксований належним чином.
Тюллі

1
Я подав квиток , щоб встановити пакет Ubuntu: bugs.launchpad.net/ubuntu/+source/pydot/+bug/1321135
Таллі

3

Зараз існує щонайменше ще 2 версії, які, як видається, підтримують PyParsing-2 та Python-3:

  • PyDotPlus від Карлоса Дженкінса з приємною програмою для побудови та вишуканою документацією . Однак вам потрібно змінити ім'я папки з 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

Піпарсінг при цьому знижується (з 2.x до 1.5.7) після встановлення підота. Майбутні Googlers: це дозволило мені правильно встановити та імпортувати Theano.


1

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

brew uninstall graphviz
brew install graphviz

1

Якщо інші рішення не працюють, це швидкий і брудний метод вирішення проблеми:

Цей приклад з python 2.7 на Ubuntu 16.04.

Відредагуйте файл python2.7 / site-пакети / 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. Я вирішив проблему, завантаживши з google найновіший pydot 1.2.3 (tar.gz), а потім встановив його в автономному режимі. Коли я оновив pydot в ubuntu 14.04, він сказав, що pydot 1.0.28 - це найновіша версія. Тому я завантажую з Google версію 1.2.3.


0

Вам потрібно зменшити pyparsing з версії 2.x до версії 1.5.7, щоб підот працював правильно.

Для win-64, використовуючи Conda, це працювало для мене:

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

Потім я відключив / видалив 2.x версію та перезавантажив розпізнавання в моєму сценарії:

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

Щоб перевірити, чи працює у вас правильна версія:

print pyparsing.__version__
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.