Ошибка pydot и graphviz: невозможно импортировать dot_parser, загрузка файлов точек будет невозможна
Когда я запускаю очень простой код с 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
14 ответов
Ответ для 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
Если вы не установили pyparsing
с помощью pip
, но вместо этого используется setup.py
, а затем посмотрите на это решение, чтобы удалить пакет. Спасибо @qtips.
В пип-репо есть новый пакет pydot2, который корректно работает с pyparsing2. Я не мог отказаться от своих пакетов, потому что matplotlib зависит от более нового пакета pyparsing.
Примечание: python2.7 от macports
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:
$ sudo pip uninstall pydot
$ sudo pip install pydot2
Смотрите следующую ссылку: http://infidea.net/troubleshooting-couldnt-import-dot_parser-loading-of-dot-files-will-not-be-possible/
Я разветвил репозиторий pydot [1], применил патч Gabi Davar и некоторые изменения для поддержки python-3. Пакет доступен в PyPI [2].
ура
Решение состояло не в том, чтобы установить pydot откуда-то, а в "python-pydot" из официальных репозиториев Ubuntu.
У меня снова возникла проблема, и мое решение не сработало. Если это верно для вас, и вы также используете Anaconda на Mac с El Capitan, попробуйте это:
conda install --channel https://conda.anaconda.org/RMG graphviz`
conda install --channel https://conda.anaconda.org/RMG pydot
Теперь есть еще как минимум две версии, которые поддерживают 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
То, что я сделал в конце после стольких попыток из того, что я увидел здесь (псевдопоследовательность, чтобы он работал для 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'
#
Это сработало для меня (Mac OS X 10.9 с Python 2.7.10 на Anaconda):
conda uninstall pydot
Затем,
conda install pydot
Затем Pyparsing понижается (с 2.x до 1.5.7) после установки pydot. Будущие гуглеры: это позволило мне правильно установить и импортировать Theano.
Когда другие решения не работают, это быстрый и грязный метод решения проблемы:
Этот пример взят из 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, и вышеуказанный вызов не работает.
На OSX Mavericks сделали следующее... Я получил ту же ошибку, но внизу была также жалоба на то, что исполняемый файл graphviz отсутствовал... Я думаю, что проблема была в том, что я установил graphviz до других модулей?
brew uninstall graphviz
brew install graphviz
Я также столкнулся с проблемой и мой 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.
Вам нужно понизить 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__