在pygraphviz Python和Heroku中,无法识别“png”格式。

3
下面的代码:
import pygraphviz as p

def main():
    A=p.AGraph()
    A.add_edge(1,2)
    A.layout(prog="dot")
    A.draw("1.png")

if __name__ == '__main__':
    main()

本地运行正常,但通过Heroku bash启动时返回IO错误:

Format: "png" not recognized. Use one of: canon cmap cmapx cmapx_np dot eps fig gv imap imap_np ismap pic plain plain-ext pov ps ps2 svg svgz tk vml vmlz xdot

我使用这个构建包上传了Graphviz。
heroku config:get BUILDPACK_URL
    https://github.com/mfenniak/heroku-buildpack-python-graphviz.git

这是我的requierments.txt文件:

Django==1.7.1
argparse==1.2.1
dj-database-url==0.3.0
dj-static==0.0.6
django-toolbelt==0.0.1
gunicorn==19.1.1
psycopg2==2.5.4
pygraphviz==1.3rc2
static3==0.5.1
wsgiref==0.1.2      

本地 graphviz 版本:

dpkg -p graphviz
    Version: 2.26.3-10ubuntu1.1

关于Heroku上的graphviz版本,我不确定,但是我在buildpack的bin/compile文件中找到了这一行:
GRAPHVIZ_BINARY="https://s3-us-west-2.amazonaws.com/mfenniak-graphviz/graphviz-2.30.tgz"

pygraphviz 在 Heroku 和本地环境中版本相同。

更新: 如何至少检查 Heroku 上的 graphviz 版本?

更新: Heroku 上的 dot 版本在设备部分没有 png。如何解决这个问题?

dot -v
dot - graphviz version 2.30.1 (20130508.0026)
libdir = "/app/mfenniak/graphviz/lib/graphviz"
Activated plugin library: libgvplugin_dot_layout.so.6
Using layout: dot:dot_layout
Activated plugin library: libgvplugin_core.so.6
Using render: dot:core
Using device: dot:dot:core
The plugin configuration file:
    /app/mfenniak/graphviz/lib/graphviz/config6
        was successfully loaded.
    render  :  dot fig map pic pov ps svg tk vml xdot
    layout  :  circo dot fdp neato nop nop1 nop2 osage patchwork sfdp twopi
    textlayout  : 
    device  :  canon cmap cmapx cmapx_np dot eps fig gv imap imap_np ismap pic plain plain-ext pov ps ps2 svg svgz tk vml vmlz xdot
    loadimage   :  (lib) eps gif jpe jpeg jpg png ps svg

这个线程看起来相似,但遗憾的是不适用于我的情况。PyGraphViz agraph.layout() 抛出 I0 错误

4个回答

4

看起来你的Graphviz可执行文件中没有PNG支持。运行“dot -v”查看支持的格式。似乎有“svg”,因此你可以尝试使用A.draw(“1.svg”)


看起来在设备部分我真的没有给png。有什么办法可以修复吗?已更新。 - Sashko Lykhenko
是的,但设备中没有列出“png”。 - Aric
我猜你需要安装(或许编译)一个带有内置png支持的graphviz版本。或者你可以使用不同的格式,或从其他格式转换为png? - Aric
graphviz-2.30 应该支持 png 格式,不是吗? - Sashko Lykhenko
你能否提供一个直接链接到.tgz格式文件的建议,以便我可以在我的构建包代码中替换它? GRAPHVIZ_BINARY="https://s3-us-west-2.amazonaws.com/mfenniak-graphviz/graphviz-2.30.tgz" - Sashko Lykhenko
显示剩余2条评论

1
我也遇到了这个问题,它让我很困扰。然而,当我偶然输入了以下代码:
import pydot
print pydot.find_graphviz() 

这表明路径指向了Matlab而不是Graphviz 然后我明白了这可能是原因 所以我卸载了Matlab,最终解决了这个问题!

我想知道你的电脑是否也安装了Matlab,如果是,可以尝试这种方法。希望能帮到你。


0

我按照上一个工单的建议尝试重新安装Graphviz,但错误仍然存在。可能是我没有正确配置它。

无论如何,如果您正在使用Debian/Ubuntu系统。

请尝试:

sudo apt-get install graphviz

然后:

sudo apt-get install python-pygraphviz

我可以在本地执行这些命令,但无法在远程服务器上执行。 - Sashko Lykhenko

0

我也遇到了同样的错误,希望这能帮助仍在使用该包且在Windows下工作的人,只需执行以下操作:

dot -c

这将基本上为您配置点


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接