我正在使用PySide 6和pygraphviz创建一个简单的三个小部件桌面应用程序.当我使用pyinstaller --onefile --noconsole stackedAPP.py
的时候,Python抛出了这个错误:Unable to find '/usr/sbin/neato' when adding binary and data files.
看起来Python找不到任何的pygraphviz布局,不仅仅是neato,因为我也try 过使用其他的布局.这不是一个孤立的问题,因为我找到了in this older post个,但没有答案,所以我不得不再次问.
一个类似的Python错误here似乎在修改包的钩子后得到了解决,所以我try 查看hook-pygraphviz.py.
在我看来,错误出在返回/usr/sbin
的行:graphviz_bindir = os.path.dirname(os.path.realpath(shutil.which("dot")))
在进一步调查后,我发现shutil.which('dot')
个返回/usr/bin/dot
个实际上是正确的(已手动确认).但os.path.realpath('/usr/bin/dot')
的结果实际上完全是另一回事:
>>> import os
>>> import shutil
>>> shutil.which("dot")
'/usr/bin/dot'
>>> os.path.realpath('/usr/bin/dot')
'/usr/sbin/libgvc6-config-update'
因此,PyInstaller在/usr/sbin中找不到neato的原因是它不在/usr/sbin中,这就是它首先在/usr/sbin中搜索的原因.
所以我决定手动修改钩子,并将路径设置为graphviz_bindir = '/usr/bin'
这很有帮助,并成功编译了PyInstaller,但当我使用该应用程序时,当它进入使用pygraph viz的阶段时,它崩溃了,这是我看到的错误消息:
(stackedAPP:18070): GLib-GIO-CRITICAL **: 22:02:47.490: GFileInfo created without standard::icon
(stackedAPP:18070): GLib-GIO-CRITICAL **: 22:02:47.490: file ../../../gio/gfileinfo.c: line 1766 (g_file_info_get_icon): should not be reached
Traceback (most recent call last):
File "processUI.py", line 127, in on_finished
File "processUI.py", line 189, in generate_causal_loop_diagram
File "pygraphviz/agraph.py", line 1613, in draw
File "pygraphviz/agraph.py", line 1404, in _run_prog
OSError: Warning: Could not load "/tmp/_MEIsRtebz/graphviz/libgvplugin_pango.so.6" - file not found
Warning: Could not load "/tmp/_MEIsRtebz/graphviz/libgvplugin_pango.so.6" - file not found
Warning: Could not load "/tmp/_MEIsRtebz/graphviz/libgvplugin_pango.so.6" - file not found
Warning: Could not load "/tmp/_MEIsRtebz/graphviz/libgvplugin_pango.so.6" - file not found
Warning: Could not load "/tmp/_MEIsRtebz/graphviz/libgvplugin_gd.so.6" - file not found
Format: "png" not recognized. Use one of: bmp canon cmap cmapx cmapx_np dot dot_json eps fig gd gd2 gif gtk gv ico imap imap_np ismap jpe jpeg jpg json json0 mp pdf pic plain plain-ext png pov ps ps2 svg svgz tif tiff tk vdx vml vmlz vrml wbmp webp x11 xdot xdot1.2 xdot1.4 xdot_json xlib
我不知道从现在开始该怎么做.我正在使用VirtualBox运行Ubuntu-23.10,我正在运行该进程.当我安装GRAPRIFIZ和PYGRIGVIZ时,我使用:
sudo apt-get graphviz graphviz-dev
pip install pygraphviz
如本documentation中所推荐的. 如有任何帮助,将不胜感激!