2

私は Qt を初めて使用し、Qt-Designer を使用してコードを生成し、Python で記述しているプログラムとやり取りしています。ただし、pyinstall を使用してそれらをバイナリにコンパイルしたい場合は/dist/、約 60 mb のサイズになります。--onefile オプションを使用すると、約 20 MB まで削減できます。

Qtが原因で不要なライブラリがインポートされていることが肥大化の原因であると確信しています。この驚くべき肥大化を減らす正しい方向に私を向けることができますか? 私が書いている些細なアプリケーションでは、20 mb は深刻な過剰であることは確かです。ご協力ありがとうございました。

使用: Python 2.6.5、pyinstaller 2.0、Qt 4.6.2、PyQt4

dist で生成されたファイルのリスト:

    bz2.so
_codecs_cn.so
_codecs_hk.so
_codecs_iso2022.so
_codecs_jp.so
_codecs_kr.so
_codecs_tw.so
datetime.so
_heapq.so
libaudio.so.2
libbz2.so.1.0
libcrypto.so.0.9.8
libexpat.so.1
libfontconfig.so.1
libfreetype.so.6
libgcc_s.so.1
libGLcore.so.1
libglib-2.0.so.0
libgobject-2.0.so.0
libgthread-2.0.so.0
libICE.so.6
libjpeg.so.62
liblcms.so.1
libmng.so.1
libncurses.so.5
libncursesw.so.5
libnvidia-tls.so.1
libpcre.so.3
libpng12.so.0
libpython2.6.so.1.0
libQt3Support.so.4
libQtCore.so.4
libQtGui.so.4
libQtNetwork.so.4
libQtOpenGL.so.4
libQtSql.so.4
libQtSvg.so.4
libQtXml.so.4
libreadline.so.6
libSM.so.6
libssl.so.0.9.8
libstdc++.so.6
libtiff.so.4
libuuid.so.1
libX11.so.6
libXau.so.6
libxcb.so.1
libXdmcp.so.6
libXext.so.6
libXrender.so.1
libXt.so.6
libz.so.1
_multibytecodec.so
PyQt4.QtCore.so
PyQt4.QtGui.so
qt4_plugins
readline.so
sip.so
4

3 に答える 3

4

これらのライブラリはQt4の依存関係であるため、Qt4にリンクする場合、その量の「肥大化」は避けられません。

これを確認するためlddに、ライブラリで を使用して、その共有依存関係を確認できます。実行してみてldd libQtGui.so.4、依存するライブラリの数を確認してください。次に、他のすべての共有ライブラリに対して同じことを行います。

個人的には、実行可能ファイルのサイズについてあまり心配しません。お気付きのように、これは主に Qt によるものであり、これはアプリケーションが大きくなっても、生成されるバイナリのサイズがほとんど変わらないことを意味します。

于 2013-02-04T08:52:24.910 に答える
2

参考までに、アプリの依存関係を分析し、PySide バインディングを再構築して適合させる Github プロジェクトであるHatchetを参照してください。

Qt5 は依存関係を減らし、ライブラリを小さなライブラリに分割する方向に進んでいます。おそらく、pyinstalled PyQt5 アプリの膨張は少ないでしょう。

必要なモジュールのみをインポートしたとしても、Python が直接バインドするライブラリが Python が直接バインドしないライブラリに依存しているかどうかを分析して、Pyinstaller または Hatchet が実行したように見えるかどうかはわかりません。

(私にとって)より悪い問題は、Pyinstaller が libxcb などのシステム ライブラリをフリーズし、OS の新しいバージョンで他のライブラリの新しいバージョンと互換性がない (フリーズしない) ことです。たとえば、Ubuntu 13.04 でフリーズしたアプリは 13.10 でクラッシュし、13.10 でフリーズしたアプリは 14.04beta でクラッシュします。回避策があります。

于 2014-03-27T15:54:22.700 に答える