使用 PyInstaller 成功打包 PySide 应用程序后,我在包文件夹中发现了许多不同的 *.so 文件。我很惊讶地看到我在项目中没有使用的库,例如:libQt53DAnimation.so
, libQt53DCore.so
, libQt5Multimedia.so
等等。
我没有在源代码中导入它们,也没有将它们包含在隐藏导入中。
正如我所读到的,PyInstaller 会自动查找应用程序运行所需的所有依赖项。如果我在打包后手动删除它们,那么我的应用程序运行时不会有任何更改/问题。这表明它们没有必要,也不应该将它们视为依赖项,不是吗?
那么有没有办法在打包的时候排除掉它们呢?
如果您确定它们对于您的应用程序不是必需的,您可以通过规范文件中的分析排除它们。您只需按照此处所示添加它们https://pythonhosted.org/PyInstaller/spec-files.html#spec-file-operation 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
用于排除模块,但不确定它与您的情况有多大相关性。
不幸的是,pyinstaller 包含某些可选依赖项,正如 Hartmut Goebel 所解释的那样here https://github.com/pyinstaller/pyinstaller/issues/2652#issuecomment-309811964
PyInstaller 最好只包含所需的模块 - 这就是
PyInstaller 是关于什么的:-)。但很多套餐都有可选的
对于您的程序来说,这些依赖项可能不是必需的,但却是
对于其他程序。 PyInstaller 无法知道这一点,如果 PyInstaller
如果删除太多,其他程序可能会失败。请使用选项
——排除这一点。
请记住,仅 Python 的功能“完整的 unicode
support”添加了很多编解码器模块,看起来没有必要,但实际上
Python 正常工作所必需的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)