在 macOS 和 Windows 上使用 PyInstaller 编译时,简单的 PyQt5 GUI 看起来像 GTK

Posted

技术标签:

【中文标题】在 macOS 和 Windows 上使用 PyInstaller 编译时,简单的 PyQt5 GUI 看起来像 GTK【英文标题】:Simple PyQt5 GUI Looks Like GTK When Compiling with PyInstaller on macOS and Windows 【发布时间】:2018-03-21 08:19:38 【问题描述】:

我曾经使用 PyInstaller 进行构建,并且一切运行良好。我不知道发生了什么变化。我有一个用于编译的预配置 VM,但现在它无法按预期工作。

当我现在构建时,出于某种原因,GUI 看起来像 GTK(看起来很老的 GUI)。

我制作了一个非常简单的 PyQt5 应用,并使用 Python 3.6.4、PyInstaller、PyQt5 和六个版本制作了一个干净的 VM。

我在 macOS 10.10、10.13、Windows 10、Windows 10 VM 上进行了尝试。

我试过 --hidden-import=PyQt5

我使用 Python 3.6.3 和 PyInstaller 3.3 再次尝试了一切

我已经使用 Python 3.6.3 和 PyInstaller dev 再次尝试了一切

我要测试的东西已经用完了。

这是简单的 PyQt5 应用示例应用: PROBLEM.zip

这是构建输出:

    C:\Users\Admin\Desktop\PROBLEM>C:\Python\python -m PyInstaller --paths C:\Python\Lib\site-packages\PyQt5\Qt\bin --add-binary *.dll;. --clean --noupx --name "TEST" main.py
250 INFO: PyInstaller: 3.4.dev0+1652c1968
265 INFO: Python: 3.6.4
265 INFO: Platform: Windows-10-10.0.16299-SP0
265 INFO: wrote C:\Users\Admin\Desktop\PROBLEM\TEST.spec
265 INFO: UPX is not available.
265 INFO: Removing temporary files and cleaning cache in C:\Users\Admin\AppData\Roaming\pyinstaller
296 INFO: Extending PYTHONPATH with paths
['C:\\Users\\Admin\\Desktop\\PROBLEM',
 'C:\\Python\\Lib\\site-packages\\PyQt5\\Qt\\bin',
 'C:\\Users\\Admin\\Desktop\\PROBLEM']
296 INFO: checking Analysis
312 INFO: Building Analysis because out00-Analysis.toc is non existent
312 INFO: Initializing module dependency graph...
312 INFO: Initializing module graph hooks...
312 INFO: Analyzing base_library.zip ...
3421 INFO: running Analysis out00-Analysis.toc
3437 INFO: Adding Microsoft.Windows.Common-Controls to dependent assemblies of final executable
  required by C:\Python\python.exe
3609 INFO: Caching module hooks...
3609 INFO: Analyzing C:\Users\Admin\Desktop\PROBLEM\main.py
3640 INFO: Loading module hooks...
3640 INFO: Loading module hook "hook-encodings.py"...
3718 INFO: Loading module hook "hook-pydoc.py"...
3718 INFO: Loading module hook "hook-PyQt5.py"...
3718 INFO: Loading module hook "hook-PyQt5.Qt.py"...
3718 INFO: Loading module hook "hook-PyQt5.QtCore.py"...
3782 INFO: Loading module hook "hook-PyQt5.QtGui.py"...
4125 INFO: Loading module hook "hook-PyQt5.QtPrintSupport.py"...
4171 INFO: Loading module hook "hook-PyQt5.QtWidgets.py"...
4187 INFO: Loading module hook "hook-xml.py"...
4422 INFO: Looking for ctypes DLLs
4437 INFO: Analyzing run-time hooks ...
4437 INFO: Including run-time hook 'pyi_rth_qt5.py'
4437 INFO: Looking for dynamic libraries
5187 INFO: Looking for eggs
5187 INFO: Using Python library C:\Python\python36.dll
5187 INFO: Found binding redirects:
[]
5203 INFO: Warnings written to C:\Users\Admin\Desktop\PROBLEM\build\TEST\warnTEST.txt
5250 INFO: Graph cross-reference written to C:\Users\Admin\Desktop\PROBLEM\build\TEST\xref-TEST.html
5281 INFO: Appending 'binaries' from .spec
5328 INFO: checking PYZ
5328 INFO: Building PYZ because out00-PYZ.toc is non existent
5328 INFO: Building PYZ (ZlibArchive) C:\Users\Admin\Desktop\PROBLEM\build\TEST\out00-PYZ.pyz
5890 INFO: Building PYZ (ZlibArchive) C:\Users\Admin\Desktop\PROBLEM\build\TEST\out00-PYZ.pyz completed successfully.
5906 INFO: checking PKG
5906 INFO: Building PKG because out00-PKG.toc is non existent
5906 INFO: Building PKG (CArchive) out00-PKG.pkg
5937 INFO: Building PKG (CArchive) out00-PKG.pkg completed successfully.
5953 INFO: Bootloader C:\Python\lib\site-packages\PyInstaller\bootloader\Windows-32bit\run.exe
5953 INFO: checking EXE
5953 INFO: Building EXE because out00-EXE.toc is non existent
5953 INFO: Building EXE from out00-EXE.toc
5953 INFO: Appending archive to EXE C:\Users\Admin\Desktop\PROBLEM\build\TEST\TEST.exe
5984 INFO: Building EXE from out00-EXE.toc completed successfully.
6000 INFO: checking COLLECT
6000 INFO: Building COLLECT because out00-COLLECT.toc is non existent
6000 INFO: Building COLLECT out00-COLLECT.toc
8703 INFO: Building COLLECT out00-COLLECT.toc completed successfully.

非常感谢任何帮助。

【问题讨论】:

和你一样丑陋的用户界面。正常构建,但 UI 未显示为直接运行 .py 文件。不知道为什么。 你使用的是什么操作系统? macOS 和 Windows 都是这样,就像 windows-95 风格的旧时尚。 您是否尝试使用我在下面的答案中写的 PIP 安装自定义 whl 版本? 【参考方案1】:

目前 PyInstaller 3.3.1 与最新版本的 PyQt5(5.9.2 之后)不兼容。他们正在为 PyQt5 开发一个新的 PyInstaller 钩子。

如果您使用的是 Pyinstaller 3.3 或 3.3.1,那么您必须使用这些版本的 SIP 和 PyQt5(安装顺序很重要)。

在 Windows 上:

sip-4.19.6-cp36-none-win32.whl
PyQt5-5.9.2-5.9.3-cp35.cp36.cp37-none-win32.whl
pyqt5_tools-5.9.0.1.2-cp36-none-win32.whl (if you need the PyQt designer)

在 macOS 上:

sip-4.19.8-cp36-cp36m-macosx_10_6_intel.whl
PyQt5-5.9.2-5.9.3-cp35.cp36.cp37-abi3-macosx_10_6_intel.whl

【讨论】:

以上是关于在 macOS 和 Windows 上使用 PyInstaller 编译时,简单的 PyQt5 GUI 看起来像 GTK的主要内容,如果未能解决你的问题,请参考以下文章

在 macOS 和 Windows 上使用 PyInstaller 编译时,简单的 PyQt5 GUI 看起来像 GTK

在Windows系统上安装MacOS虚拟机

MacOS 和 Windows 上的 Python 多处理行为

如何在MacOS上创建ssh隧道? [关闭]

MacOS虚拟Windows及工具箱 | Parallels Desktop and Toolbox 16.0

Pyinstaller“无法执行脚本pyi_rth_pkgres”和缺少包