Не могу построить график граната (pygraphviz не найден)
Я не могу понять, что происходит, но я больше не могу построить график граната внутри PyCharm. Я использую conda в качестве менеджера пакетов и пошел как обычно:
conda install graphviz
conda install python-graphviz
но каждый раз, когда я звоню model.plot()
изнутри PyCharm я получаю
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/Applications/PyCharm.app/Contents/helpers/pydev/_pydev_bundle/pydev_umd.py", line 198, in runfile
pydev_imports.execfile(filename, global_vars, local_vars) # execute the script
File "/Applications/PyCharm.app/Contents/helpers/pydev/_pydev_imps/_pydev_execfile.py", line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File "/Users/.../xai/import.py", line 36, in <module>
model.plot()
File "pomegranate/BayesianNetwork.pyx", line 281, in pomegranate.BayesianNetwork.BayesianNetwork.plot
ValueError: must have pygraphviz installed for visualization
Я, очевидно, уже пытался установить pygraphviz
но, похоже, не имеет значения
0 ответов
Столкнулся с аналогичной проблемой, и хотя решение от @Baumann у меня не сработало, установка matplotlib
исправил мою проблему (python 3.6 под Win10 и WSL).
pip install matplotlib
Предпосылки для предположения: код граната в BayesianNetwork.pyx
улавливает несколько исключений импорта с одним и тем же оператором try (см. код ниже, доступный также на github, последний коммит f116357 и в моем случае, даже если я установилpygraphviz
не имея matplotlib
установленный приводил к возникновению неприятного исключения.
строка 40 и далее:
try:
import tempfile
import pygraphviz
import matplotlib.pyplot as plt
import matplotlib.image
except ImportError:
pygraphviz = None
затем строка 222 и далее:
if pygraphviz is not None:
G = pygraphviz.AGraph(directed=True)
for state in self.states:
G.add_node(state.name, color='red')
for parent, child in self.edges:
G.add_edge(parent.name, child.name)
if filename is None:
with tempfile.NamedTemporaryFile() as tf:
G.draw(tf.name, format='png', prog='dot')
img = matplotlib.image.imread(tf.name)
plt.imshow(img)
plt.axis('off')
else:
G.draw(filename, format='pdf', prog='dot')
else:
raise ValueError("must have pygraphviz installed for visualization")
Я только что столкнулся с той же проблемой. Я решил это установкой пакета разработки graphviz. В репозитории openSUSE он называетсяgraphviz-devel
.
В его описании говорится:
Пакет graphviz-devel содержит все, что необходимо для разработки программ, использующих библиотеки graphviz, включая страницы man3.