我使用py2app
制作使用wxPython
(whew)的matplotlib
冻结二进制文件。由此产生的可执行文件非常大,所以我希望尽可能减少它。
这样做的一个明显方法是排除不需要的matplotlib
后端。我已尝试使用python setup.py py2app --matplotlib-backends -
运行我的脚本,该脚本应仅编译脚本中使用的后端,如下所示:https://pythonhosted.org/py2app/options.html。由此产生的可执行文件确实要小得多,但它已经破碎了。我也试过了python setup.py py2app --matplotlib-backends "WXAgg"
,但同样失败了。这是大部分的追溯(从控制台尴尬复制,抱歉)。
import wx
File "wx/__init__.pyc", line 45, in <module>
File "wx/_core.pyc", line 4, in <module>
File "wx/_core_.pyc", line 14, in <module>
File "wx/_core_.pyc", line 10, in __load
ImportError: dlopen(/Users/***/***/***/dist/magic_gui.app/Contents/Resources/lib/python2.7/lib-dynload/wx/_core_.so, 2): Library not loaded: @rpath/lib/libwx_osx_cocoau-3.0.dylib
Referenced from: /Users/***/***/***/dist/magic_gui.app/Contents/Resources/lib/python2.7/lib-dynload/wx/_core_.so
Reason: image not found
也许我可以明确告诉它包含libwx_osx_cocoau-3.0.dylib。或者,我可能需要明确包含另一个后端(虽然我使用的是wxPython
,因此WXAgg后端应该是正确的。)
我有两个问题:第一,有没有办法在不破坏我的程序的情况下只包含必需的matplotlib
后端?其次,还有其他方法可以/应该考虑使用py2app使我的程序更小吗?