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

How to exclude unnecessary Qt *.so files when packaging an application?

在使用 PyInstaller 成功打包我的 PySide 应用程序后,我在包文件夹中发现了许多不同的 *.so 文件。我很惊讶地看到我没有在我的项目中使用的库,例如:libQt53DAnimation.solibQt53DCore.solibQt5Multimedia.so

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

正如我所读,PyInstaller 会自动找到 运行 应用程序所需的所有依赖项。如果我在打包后手动删除它们,那么我的应用 运行ning 没有任何 changes/troubles。那就是指出它们没有必要,它们不应该被视为依赖项,不是吗?

那么有什么办法可以在打包的时候排除掉它们

如果您确定它们不是您的应用程序所必需的,您可以使用规范文件中的分析排除它们。您只需按照此处所示添加它们 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 解释的那样,pyinstaller 包含某些可选的依赖项 here

PyInstaller does it's best to include only the needed modules - that's what PyInstaller is about :-). But many packages have optional dependencies which for your program might not be necessary, but are for other programs. PyInstaller can't know this and if PyInstaller would remove to much, other programs might fail. Please use option --exclude for this.

Please keep in mind, that alone Python's feature "full unicode support" add a lot of codecs modules, which look unecessary but are required for Python to work properly.