我正在使用PySide2 GUI开发一个简单的Python应用程序。它目前在Windows、Linux和Mac上运行良好。在Windows上,我可以使用PyInstaller和InnoSetup构建一个简单的安装程序。然后我试着在Mac上做同样的事情。它很快就坏了,因为系统拒绝启动PyInstaller生成的命令或应用程序,因为它没有正确签名。因为我不是苹果的开发者,所以我不能签署任何东西
经过一些研究,我尝试了py2app。我可以更进一步。与
python setup.py py2app -A
我可以创建一个可运行的应用程序。它显然不能移植到其他系统,因为它使用我的开发文件夹。如果我使用python setup.py py2app
,生成的程序将无法启动,因为py2app没有复制所有必需的Qt内容。我试图一个接一个地添加丢失的库,但最后系统找不到插件,我放弃了
有人能帮我把使用QtGUI的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)
下面是用于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'],
)
我认为您缺少的是在应用程序包中包含Python3框架。我最近自己开发了一个简单的macOS应用程序,但是我想对如何实现这一点有更多的了解,所以我对应用程序的实际结构做了一些深入的研究。基本上,您将把所有内容都放在一个普通文件夹中,其中包含应用程序的名称。调用此文件夹
MyApp
。在这个文件夹中,我们将有另一个名为Contents
。据我所知,py2app
只需要将构成应用程序的所有内容都放在这个文件夹中,并将它们组织起来,同时创建一个Info.plist
文件,该文件也放在Contents
中。到目前为止,以下是您所拥有的:MyApp
-> Contents
-> -> Info.plist
除了包含所有必需的properties的
Info.plist
文件之外,在Contents
文件夹中,您将至少有一个MacOS
文件夹和一个Resources
文件夹。您的问题是您还需要一个Frameworks
文件夹,在那里您可以添加所需的Python版本现在,您的应用程序层次结构应该如下所示:
MyApp
-> Contents
-> -> Info.plist
-> -> MacOS
-> -> Resources
-> -> Frameworks
在
Frameworks
文件夹中,您可以放置用于构建应用程序的完整Python 3框架,以及运行应用程序所需的任何站点包,然后您可以在可执行文件中反映所有这些更改,以便指向正确的安装据我所知,使应用程序在MacOS上正常运行所需的一切就是确保主可执行文件位于
MacOS
文件夹中,并指向位于Frameworks
文件夹中的Python,图标.icns
文件位于Resources
文件夹中,并且构建了Info.plist
文件为了让MacOS将其识别为一个完整的应用程序,我相信您可能需要使用
productbuild
并包含一个开发人员许可证证书,但只有当您希望分发应用程序时才需要它。否则,我只是将扩展.app
添加到MyApp
,将其转换为应用程序如果没有上述许可证/证书,它可能无法识别是否应该找到您的图标文件并添加它,因此如果您在预览中打开它,选择“全部”,然后复制它,您应该能够右键单击应用程序,按“获取信息”,并将图标粘贴到窗口中当前图标的顶部,以使其正确显示
编辑:学习制作macOS应用程序的我的资源:
Bundle structure
Including frameworks
Signing your application
^{} manpage
在对build a macOS bundle for a PySide2 application的不同选项进行了大量修改之后,我发现以下步骤基本上是现成的
在macOS Catalina 10.15.7上,使用Python 3.9.1、PySide2 5.15.2和pyinstaller 4.2对使用
pyinstaller
创建macOS应用程序包的方法进行了测试安装pyenv和具有框架支持的最新Python(请参见Pyenv、How to manage multiple Python versions and virtual environments了解pyenv的工作原理):
为示例创建文件夹,创建示例pyside应用程序:
hello.py:
为项目创建venv,安装python软件包:
尝试使用python解释器运行应用程序:
创建macos应用程序包:
使用应用程序包运行应用程序:
检查生成的
hello.spec
对于构建配置,使用pyinstaller hello.spec
重新构建应用程序要求
问题
PySide2
必须添加到包列表的选项下Library not loaded: @rpath/libshiboken2.abi3.5.15.dylib, Reason: image not found
解决方案
稍微修改的setup.py可能如下所示:
此外,还添加了图标定义和一些基本信息的plist条目
整个构建最好使用如下脚本触发:
测试
以下是测试运行的屏幕截图:
相关问题 更多 >
编程相关推荐