51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

PyQt6 pyinstaller应用程序可以构建,但在MacOS(M1芯片)上无法打开。

英文:

PyQt6 pyinstaller app builds but wont open MacOS (M1 chip)

问题 {#heading}

我正在尝试使用PyQt6制作一个Python桌面应用程序。我想通过使用pyinstaller将其制作成一个可点击的应用程序,但是当我尝试从Finder运行应用程序时,出现了"应用程序意外关闭"的错误。同样,我也无法从终端运行应用程序,但是在没有pyinstaller的情况下通过我的IDE运行应用程序时,应用程序可以正常工作。

为了测试是否是我的应用程序的问题,我创建了一个新的环境,使用不同版本的Python,并使用了来自PyQt网站的以下简单应用程序代码(https://www.pythonguis.com/tutorials/pyqt6-creating-your-first-window/)

Python版本:3.9
pyinstaller版本:5.13.0
pyqt6版本:6.5.2

尝试启动应用程序并出现崩溃时,将日志发送给苹果会显示以下分段错误:

异常类型:EXC_BAD_ACCESS(SIGSEGV)
异常代码:KERN_INVALID_ADDRESS at 0x0000000000000008
异常代码:0x0000000000000001,0x0000000000000008

终止原因:命名空间SIGNAL,代码11 分段错误:11
终止进程:exc handler [26876]

VM区域信息:0x8不在任何区域中。在以下区域之前的字节:105553518919672
     区域类型                      起始 - 结束          [VSIZE] PRT/MAX SHRMOD  REGION DETAIL
     启动时未使用的空间
--->  
     MALLOC_NANO(保留)600018000000-600020000000 [128.0M] rw-/rwx SM=NUL  ...(未分配)

线程0崩溃::主线程分派队列:com.apple.main-thread
0    CoreFoundation     0x1922c665c _CFGetNonObjCTypeID + 92
1    CoreFoundation     0x1921982ec CFBundleCopyBundleURL + 24
2    QtCore            0x102380a5c QLibraryInfoPrivate::path(QLibraryInfo::LibraryPath, QLibraryInfoPrivate::UsageMode) + 440
3    QtCore            0x1023810ac QLibraryInfoPrivate::path(QLibraryInfo::LibraryPath, QLibraryInfoPrivate::UsageMode) + 2056
4    QtCore            0x1023b7470 0x102374000 + 275568
5    QtCore            0x1023b6a6c 0x102374000 + 273004
6    QtCore            0x1023b8fd4 0x102374000 + 282580
...
(以下是长长的错误堆栈,省略部分)

我已经尝试过其他框架,如py2app,更改pyqt版本,更改python版本,在AWS上运行一个新的Ubuntu机器上(新操作系统),并尝试在不同的Mac设备上运行,但仍然没有成功。我还尝试了pyinstaller的所有不同标志,例如--onefile--onedir。我还尝试了Stack Overflow上的建议,使用pyinstaller的开发版本,但这并没有解决问题。非常感谢您提前的帮助! 英文:

I am trying to make a python desktop app with PyQt6. I want to make it into a clickable app by using pyinstaller but I get a "app closed unexpectedly" error when I try to run the app from finder. Equally I cant run the app from terminal either but the app works fine when run through my IDE without pyinstaller.

To test it isnt my app, I have made a fresh environment with different python versions and used the following simple app code from the PyQt website (https://www.pythonguis.com/tutorials/pyqt6-creating-your-first-window/)

Python version 3.9
pyinstaller version 5.13.0
pyqt6 version 6.5.2

When trying to launch the app and it crashes, sending the logs to apple gives a segmentation fault as follows:

Exception Type:        EXC_BAD_ACCESS (SIGSEGV)
Exception Codes:       KERN_INVALID_ADDRESS at 0x0000000000000008
Exception Codes:       0x0000000000000001, 0x0000000000000008
Termination Reason:    Namespace SIGNAL, Code 11 Segmentation fault: 11
Terminating Process:   exc handler [26876]
VM Region Info: 0x8 is not in any region.  Bytes before following region: 105553518919672
REGION TYPE                    START - END         [ VSIZE] PRT/MAX SHRMOD  REGION DETAIL
UNUSED SPACE AT START
--->  
MALLOC_NANO (reserved)   600018000000-600020000000 [128.0M] rw-/rwx SM=NUL  ...(unallocated)
Thread 0 Crashed::  Dispatch queue: com.apple.main-thread
0   CoreFoundation                	       0x1922c665c _CFGetNonObjCTypeID + 92
1   CoreFoundation                	       0x1921982ec CFBundleCopyBundleURL + 24
2   QtCore                        	       0x102380a5c QLibraryInfoPrivate::path(QLibraryInfo::LibraryPath, QLibraryInfoPrivate::UsageMode) + 440
3   QtCore                        	       0x1023810ac QLibraryInfoPrivate::path(QLibraryInfo::LibraryPath, QLibraryInfoPrivate::UsageMode) + 2056
4   QtCore                        	       0x1023b7470 0x102374000 + 275568
5   QtCore                        	       0x1023b6a6c 0x102374000 + 273004
6   QtCore                        	       0x1023b8fd4 0x102374000 + 282580
7   QtCore                        	       0x1023b5c58 QLoggingCategory::QLoggingCategory(char const*, QtMsgType) + 52
8   QtCore.abi3.so                	       0x10509cde0 warmUpLocationServices() + 268
9   QtCore.abi3.so                	       0x10509f724 _GLOBAL__sub_I_qdarwinpermissionplugin_location.mm + 12
10  dyld                          	       0x191dd81d8 invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator()() const + 168
11  dyld                          	       0x191e19c60 invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const + 172
12  dyld                          	       0x191e0d1a4 invocation function for block in dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const + 528
13  dyld                          	       0x191db82d8 dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void (load_command const*, bool&) block_pointer) const + 296
14  dyld                          	       0x191e0c1cc dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const + 192
15  dyld                          	       0x191e0ecfc dyld3::MachOFile::forEachInitializerPointerSection(Diagnostics&, void (unsigned int, unsigned int, bool&) block_pointer) const + 160
16  dyld                          	       0x191e19904 dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const + 432
17  dyld                          	       0x191dd485c dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const + 448
18  dyld                          	       0x191dd4c10 dyld4::Loader::runInitializersBottomUp(dyld4::RuntimeState&, dyld3::Array<dyld4::Loader const*>&) const + 220
19  dyld                          	       0x191dd8264 dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator()() const + 112
20  dyld                          	       0x191dd4d90 dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const + 304
21  dyld                          	       0x191df2d58 dyld4::APIs::dlopen_from(char const*, int, void*) + 1440
22  libpython3.10.dylib           	       0x100dfa844 _PyImport_FindSharedFuncptr + 296
23  libpython3.10.dylib           	       0x100db599c _imp_create_dynamic + 1108
24  libpython3.10.dylib           	       0x100ced0fc cfunction_vectorcall_FASTCALL + 200
25  libpython3.10.dylib           	       0x100d847dc _PyEval_EvalFrameDefault + 27276
26  libpython3.10.dylib           	       0x100d7d444 _PyEval_Vector + 2056
27  libpython3.10.dylib           	       0x100d886d4 call_function + 524
28  libpython3.10.dylib           	       0x100d84464 _PyEval_EvalFrameDefault + 26388
29  libpython3.10.dylib           	       0x100d7d444 _PyEval_Vector + 2056
30  libpython3.10.dylib           	       0x100d886d4 call_function + 524
31  libpython3.10.dylib           	       0x100d8443c _PyEval_EvalFrameDefault + 26348
32  libpython3.10.dylib           	       0x100d7d444 _PyEval_Vector + 2056
33  libpython3.10.dylib           	       0x100d886d4 call_function + 524
34  libpython3.10.dylib           	       0x100d844d4 _PyEval_EvalFrameDefault + 26500
35  libpython3.10.dylib           	       0x100d7d444 _PyEval_Vector + 2056
36  libpython3.10.dylib           	       0x100d886d4 call_function + 524
37  libpython3.10.dylib           	       0x100d844d4 _PyEval_EvalFrameDefault + 26500
38  libpython3.10.dylib           	       0x100d7d444 _PyEval_Vector + 2056
39  libpython3.10.dylib           	       0x100d886d4 call_function + 524
40  libpython3.10.dylib           	       0x100d844d4 _PyEval_EvalFrameDefault + 26500
41  libpython3.10.dylib           	       0x100d7d444 _PyEval_Vector + 2056
42  libpython3.10.dylib           	       0x100c9b894 object_vacall + 272
43  libpython3.10.dylib           	       0x100c9bab4 _PyObject_CallMethodIdObjArgs + 128
44  libpython3.10.dylib           	       0x100db1a28 PyImport_ImportModuleLevelObject + 1284
45  libpython3.10.dylib           	       0x100d770b4 builtin___import__ + 124
46  libpython3.10.dylib           	       0x100cec3a0 cfunction_call + 80
47  libpython3.10.dylib           	       0x100c9998c _PyObject_MakeTpCall + 612
48  libpython3.10.dylib           	       0x100c9ac48 _PyObject_CallFunctionVa + 776
49  libpython3.10.dylib           	       0x100c9a918 PyObject_CallFunction + 64
50  libpython3.10.dylib           	       0x100db13e8 PyImport_Import + 552
51  libpython3.10.dylib           	       0x100db27e0 PyImport_ImportModule + 60
52  sip.cpython-310-darwin.so     	       0x100be1754 sip_api_export_module + 88
53  QtWidgets.abi3.so             	       0x1017c1188 PyInit_QtWidgets + 276
54  libpython3.10.dylib           	       0x100db59ec _imp_create_dynamic + 1188
55  libpython3.10.dylib           	       0x100ced0fc cfunction_vectorcall_FASTCALL + 200
56  libpython3.10.dylib           	       0x100d847dc _PyEval_EvalFrameDefault + 27276
57  libpython3.10.dylib           	       0x100d7d444 _PyEval_Vector + 2056
58  libpython3.10.dylib           	       0x100d886d4 call_function + 524
59  libpython3.10.dylib           	       0x100d84464 _PyEval_EvalFrameDefault + 26388
60  libpython3.10.dylib           	       0x100d7d444 _PyEval_Vector + 2056
61  libpython3.10.dylib           	       0x100d886d4 call_function + 524
62  libpython3.10.dylib           	       0x100d8443c _PyEval_EvalFrameDefault + 26348
63  libpython3.10.dylib           	       0x100d7d444 _PyEval_Vector + 2056
64  libpython3.10.dylib           	       0x100d886d4 call_function + 524
65  libpython3.10.dylib           	       0x100d844d4 _PyEval_EvalFrameDefault + 26500
66  libpython3.10.dylib           	       0x100d7d444 _PyEval_Vector + 2056
67  libpython3.10.dylib           	       0x100d886d4 call_function + 524
68  libpython3.10.dylib           	       0x100d844d4 _PyEval_EvalFrameDefault + 26500
69  libpython3.10.dylib           	       0x100d7d444 _PyEval_Vector + 2056
70  libpython3.10.dylib           	       0x100d886d4 call_function + 524
71  libpython3.10.dylib           	       0x100d844d4 _PyEval_EvalFrameDefault + 26500
72  libpython3.10.dylib           	       0x100d7d444 _PyEval_Vector + 2056
73  libpython3.10.dylib           	       0x100c9b894 object_vacall + 272
74  libpython3.10.dylib           	       0x100c9bab4 _PyObject_CallMethodIdObjArgs + 128
75  libpython3.10.dylib           	       0x100db1a28 PyImport_ImportModuleLevelObject + 1284
76  libpython3.10.dylib           	       0x100d770b4 builtin___import__ + 124
77  libpython3.10.dylib           	       0x100cec3a0 cfunction_call + 80
78  libpython3.10.dylib           	       0x100c9a3a0 _PyObject_Call + 148
79  libpython3.10.dylib           	       0x100d847dc _PyEval_EvalFrameDefault + 27276
80  libpython3.10.dylib           	       0x100d7d444 _PyEval_Vector + 2056
81  libpython3.10.dylib           	       0x100d886d4 call_function + 524
82  libpython3.10.dylib           	       0x100d844d4 _PyEval_EvalFrameDefault + 26500
83  libpython3.10.dylib           	       0x100d7d444 _PyEval_Vector + 2056
84  libpython3.10.dylib           	       0x100c9b894 object_vacall + 272
85  libpython3.10.dylib           	       0x100c9bab4 _PyObject_CallMethodIdObjArgs + 128
86  libpython3.10.dylib           	       0x100db1ba0 PyImport_ImportModuleLevelObject + 1660
87  libpython3.10.dylib           	       0x100d82b40 _PyEval_EvalFrameDefault + 19952
88  libpython3.10.dylib           	       0x100d7d444 _PyEval_Vector + 2056
89  libpython3.10.dylib           	       0x100d7cc0c PyEval_EvalCode + 120
90  main                          	       0x10074c8ec 0x100748000 + 18668
91  main                          	       0x10074cf10 0x100748000 + 20240
92  dyld                          	       0x191dbbf28 start + 2236

I have tried other frameworks such as py2app, changing pyqt versions, changing python versions, running on a ubuntu machine (new OS) on aws and tried on a different mac device and still no luck. I have also tried all the different flags from pyinstaller e.g --onefile and --onedir. I have also seen and tried the stack overflow suggestion to use the dev version of pyinstaller but this did not resolve the issue. Any help would be massively appreciated - thanks in advance!

答案1 {#1}

得分: 2

在经过了很多搜索后,最终导致我找到答案的关键术语是 Segmentation fault: 11。一旦找到了这个,对我起作用的修复方法来自以下帖子(https://github.com/pyinstaller/pyinstaller/issues/7789):

pip uninstall pyinstaller
PYINSTALLER_COMPILE_BOOTLOADER=1 pip install git+https://github.com/pyinstaller/pyinstaller.git@develop

我希望这对其他遇到相同问题的人有所帮助! 英文:

After much searching, the key term that led me to the answer ended up being the Segmentation fault: 11. Once this was found then the fix that worked for me came from the following post (https://github.com/pyinstaller/pyinstaller/issues/7789) which was:

pip uninstall pyinstaller
PYINSTALLER_COMPILE_BOOTLOADER=1 pip install git+https://github.com/pyinstaller/pyinstaller.git@develop

I hope this helps if anyone else runs into the same issue!


赞(1)
未经允许不得转载:工具盒子 » PyQt6 pyinstaller应用程序可以构建,但在MacOS(M1芯片)上无法打开。