Ser*_*sta 17 python macos pyinstaller py2app pyside2
我正在使用 PySide2 GUI 开发一个简单的 Python 应用程序。它目前在 Windows、Linux 和 Mac 上运行良好。在 Windows 上,我可以使用 PyInstaller 和 InnoSetup 来构建一个简单的安装程序。然后我尝试在 Mac 上做同样的事情。它很快就崩溃了,因为系统拒绝启动 PyInstaller 生成的命令或应用程序,因为它没有正确签名。因为我不是苹果开发者,所以我不能签署任何东西......
经过一番研究,我尝试了 py2app。我可以在这里更进一步。和
python setup.py py2app -A
Run Code Online (Sandbox Code Playgroud)
我可以创建一个可运行的应用程序。显然不能移植到不同的系统,因为它使用我的开发文件夹。如果我使用python setup.py py2app生成的程序无法启动,因为 py2app 没有复制所有必需的 Qt 东西。我试着将缺失的库一一添加,但最后系统找不到插件,我放弃了......
有人可以帮助我使用 Qt GUI 将 python 脚本或包转换为 Mac 上的便携式应用程序吗?理想情况下,配方应该说明如何使用自定义应用程序图标,但这不是必需的。
由于我的真实包对于 SO 问题来说太大了,因此我将其缩减为最小的可重现示例:
from PySide3.QtWidgets import *
import sys
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
hello = QLabel('Hello', self)
hello.move(50, 50)
def run(args):
app = QApplication(args)
main = MainWindow()
main.show()
sys.exit(app.exec_())
if __name__ == '__main__':
run(sys.argv)
Run Code Online (Sandbox Code Playgroud)
这是用于 py2app 的 setup.py 文件:
from setuptools import setup
APP = ['app.py']
DATA_FILES = []
OPTIONS = {}
setup(
app=APP,
data_files=DATA_FILES,
options={'py2app': OPTIONS},
setup_requires=['py2app'],
)
Run Code Online (Sandbox Code Playgroud)
要求
问题
PySide2 必须在 OPTIONS 下添加到包列表Library not loaded: @rpath/libshiboken2.abi3.5.15.dylib, Reason: image not found解决方案
稍作修改的 setup.py 可能如下所示:
from setuptools import setup
APP = ['app.py']
DATA_FILES = []
OPTIONS = {
'packages': ['PySide2'],
'iconfile': 'some_icon.icns',
'plist': {
'CFBundleDevelopmentRegion': 'English',
'CFBundleIdentifier': "com.ballesta.xxx",
'CFBundleVersion': "1.0.0",
'NSHumanReadableCopyright': u"Copyright © 2020, Serge Ballesta, All Rights Reserved"
}
}
setup(
app=APP,
data_files=DATA_FILES,
options={'py2app': OPTIONS},
setup_requires=['py2app'],
)
Run Code Online (Sandbox Code Playgroud)
此外,还添加了图标定义和一些基本信息的 plist 条目。
整个构建最好使用如下所示的脚本触发:
#!/bin/sh
python3 -m venv venv
. venv/bin/activate
pip install PySide2
pip install py2app
python setup.py py2app
cp ./venv/lib/python3.8/site-packages/shiboken2/libshiboken2.abi3.5.15.dylib ./dist/app.app/Contents/Resources/lib/python3.8/lib-dynload/shiboken2
Run Code Online (Sandbox Code Playgroud)
测试
这是测试运行的屏幕截图: