помилка 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.