Проблема graphviz при порождении скрипта Python из C

Я использую библиотеку graphviz для Python.

Когда я запускаю скрипт из терминала, график создается, но когда я запускаю скрипт из программы на C, используя posix_spawn, я получаю сообщение об ошибке, говорящее, что

"ValueError: Программная точка не найдена в пути" (я перепробовал все варианты: "neato", "dot", "twopi", "circo", "fdp", "nop").

Мой скрипт на Python использует местоположение #!/ Usr / local / bin / python. Я попытался явно использовать этот путь и опробовал ту же последовательность:

import pygraphviz as pgv
G = pgv.AGraph(directed=True)
G.add_node(1)
G.get_node(1).attr['label'] = 'hi'
G.draw('test.png', prog='dot')

и это сработало

Я заблудился, почему после вызова скрипта с помощью posix_spawn библиотека graphviz больше не может найти путь.

РЕДАКТИРОВАТЬ:

После добавления точки пути к: bash_profile, bash_rc и т. Д. / Paths, я получаю / usr / bin: / bin: / usr / sbin: / sbin, когда пытаюсь распечатать свой путь как из скрипта Python, так и из программы C, в то время как мой echot $ ПУТЬ имеет много строк.

Также пытался добавить PATH из Python sys.path.append('/opt/local/bin/dot')

PS Я использую Webots в качестве моей IDE

1 ответ

Решение

Сообщение об ошибке говорит, что graphviz не на вашем пути. Удостовериться $PATH содержит папку, которая содержит dot и остальные инструменты GraphViz.

[РЕДАКТИРОВАТЬ] Я не уверен, откуда Webots берет свой путь; я думаю, что Mac OS/X удаляет PATH процессов, которые вы запускаете с рабочего стола (или, возможно, процесс рабочего стола запускается с очень простой PATH).

В таких ситуациях я обычно оборачиваю C-программу в исполняемый скрипт, который устанавливает среду (например, PATH), а затем вызывает саму C-программу. Когда вы выполняете скрипт из любого места, код будет вести себя как положено.

Другие вопросы по тегам