打包应用程序时如何排除不必要的Qt * .so文件?

时间:2019-08-12 18:46:11

标签: python pyinstaller packaging pyside2

在使用PyInstaller成功打包PySide应用之后,我在package文件夹中发现了许多不同的* .so文件。我惊讶地发现我没有在项目中使用库,例如​​: for i in range(0,len(m)): k.append(f[:]) libQt53DAnimation.solibQt53DCore.so等。

我没有在源代码中导入它们,也没有将它们包含在隐藏的导入中。

如我所读,PyInstaller会自动查找应用程序运行所需的所有依赖项。如果我在打包后手动将其删除,则我的应用程序运行时没有任何更改/问题。指出没有必要,它们不应该被视为依赖项,不是吗?

那么包装时有什么方法可以排除它们

1 个答案:

答案 0 :(得分:0)

如果您确定应用程序不需要它们,则可以使用spec文件中的Analysis排除它们。您只需要添加它们即可,如此处https://pythonhosted.org/PyInstaller/spec-files.html#spec-file-operation所示。

这是您可以做的:

a.binaries = a.binaries - TOC([
  ('libQt53DAnimation.so', None, None),
  ('libQt53DCore.so', None, None),
  ('libQt5Multimedia.so', None, None),
])

还有一个--exclude-module EXCLUDES用于排除模块,但不确定与您的情况有多相关。

不幸的是,正如Hartmut Goebel解释的here

,pyinstaller包含某些可选的依赖项。
  

PyInstaller最好只包含所需的模块-即   PyInstaller是关于:-)的。但是很多包都有可选的   您的程序可能不需要依赖项,但是   对于其他程序。 PyInstaller不知道这一点,是否PyInstaller   将删除太多,其他程序可能会失败。请使用选项   -为此除外。

     

请记住,仅Python的功能就是“完整unicode”   支持”中添加了许多编解码器模块,这些模块看起来没有必要,但它们   是Python正常运行所必需的。