【发布时间】:2021-02-01 18:58:41
【问题描述】:
我正在尝试将 Python(在 PyCharm 中的 venv 中为 3.8)打包为可分发的 macOS .app 包。我之前在 macOS Catalina 下使用 Tkinter 完成过此操作,但是这个项目是在 PySide2 (5.15.2) 中并在 M1 芯片上的 Big Sur 11.1 下开发的。
MRE(在我的环境中保存为 main.py):
from PySide2.QtWidgets import QApplication, QMainWindow, QLabel
app = QApplication()
window = QMainWindow()
label = QLabel('foo')
window.setCentralWidget(label)
window.show()
app.exec_()
从 PyCharm 运行它会按预期正确呈现窗口。但是,在通过 PyInstaller 打包后,执行 .py(来自 /dist 文件夹)或创建的 .app 包都无法呈现任何 UI。看起来应用程序已正确启动,因为它出现在 Dock 中,并且进程在 Activity Monitor 中没有响应(CPU 使用率约为 98%)。没有错误打印到控制台,也没有在任何地方注明。
Pyinstaller 命令相当基本:pyinstaller --windowed main.py
以及生成的 .spec:
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(['main.py'],
pathex=['/Users/ben/PycharmProjects/pythonProject'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
[],
exclude_binaries=True,
name='main',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=False )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='main')
app = BUNDLE(coll,
name='main.app',
icon=None,
bundle_identifier=None)
我发现了以下内容:
- https://forums.macrumors.com/threads/pyqt5-and-big-sur.2260773/
- Apps not popping up on macOS Big Sur 11.0.1
此外,我已经在 PyQt5 下对此进行了测试(并为 QApplication() 提供了一组空的 args,app = QApplication([]),因为需要 > 0 个 args。这是成功的;按预期构建了一个 UI。我'还为 PySide2 的 QApplication 提供了 sys.argv,但没有生成 UI。
但是,上面链接中列出的修复程序表示要添加到系统环境中。由于我只遇到 dist 可执行文件的问题,因此我不确定如何继续将其放入可分发文件中;我可以插入的 .spec 是否有更改以在我将安装它的机器上设置环境变量?我完全错过了什么吗?这只是 Big Sur 库参考问题的另一个产物(如这些链接中所述)吗?
【问题讨论】:
标签: python python-3.x pyinstaller pyside2 macos-big-sur