MacOS 下Nuikta编译PyQt5程序碰到的坑

Posted alitrack

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MacOS 下Nuikta编译PyQt5程序碰到的坑相关的知识,希望对你有一定的参考价值。



第一次接触它已经是半年多前,尝试着编译了个hello world便因为有事搁置一边。

  • hello world

  • pyqt5 hello world

  • pyqt5 与sqlite

  • diffexcel

为了方便记录步骤和输出结果,这次仍然选择了Jupyter Notebook(不过是在VS Code里,感觉在这里更方便)

环境

!conda create -y -n nuitka python=3.7!conda activate nuitkacd nuitka!pip install nuitka pyqt5!python -m nuitka --version

返回

0.6.7Python: 3.7.7 (default, Mar 26 2020, 10:32:53) Executable: /Users/steven/anaconda3/envs/eric/bin/pythonOS: DarwinArch: x86_64


第一个程序,hello world

  • hello.py

%%writefile hello.pydef main(): print("你好 Nuitka!")
if __name__ == "__main__": main()


  • 编译

!python -m nuitka --standalone --clang \--follow-imports hello.py
  • 测试

!hello.dist/hello
  • 成功运行,返回

你好 Nuitka!

MacOS 下Nuikta编译PyQt5程序碰到的坑

完整的helloworld竟然有23M


第二个程序 pyqt5 hello world

  • pyqt5_hello_world.py

%%writefile pyqt5_hello_world.pyimport sysfrom PyQt5 import QtWidgets
app = QtWidgets.QApplication(['HelloWorld'])
button = QtWidgets.QPushButton('Click me!')button.show()
sys.exit(app.exec())
  • 编译

!python -m nuitka --standalone \--windows-disable-console \--enable-plugin=qt-plugins \pyqt5_hello_world.py
  • 运行

!pyqt5_hello_world.dist/pyqt5_hello_world
  • 返回

Segmentation fault: 11

接下来就是漫长的查找原因过程,网上搜索各种资料,没有答案,issues里也有人提到了这个问题,最后的结果让人有些欲哭无泪,就是因为少了一个空目录

mkdir pyqt5_hello_world.dist/PyQt5/Qt
  • 再次运行,成功

MacOS 下Nuikta编译PyQt5程序碰到的坑

窗口有些小,看得到吗?


第三个程序 PyQt5 + SQLite的应用

  • 代码(网上碰巧看到的一个例子),

!git clone https://github.com/Maxzor/ABL_suggcd ABL_sugg
  • 编译

!python -m nuitka --standalone \--windows-disable-console \--plugin-enable=qt-plugins=sqldrivers,iconengines,imageformats,mediaservice,platforms,printsupport \--recurse-not-to=numpy --recurse-all \--output-dir=o main.py

这里需要指定具体enable哪些qt-plugin,主要是在默认plugins的基础上再要引入sqldrivers

  • 测试

#创建空Qt目录mkdir o/main.dist/PyQt5/Qt#数据导入!cat sqlite3_dump.sql|sqlite3 o/main.dist/as.db#运行程序!cd o/main.dist && ./main
  • 成功

MacOS 下Nuikta编译PyQt5程序碰到的坑

第四个程序, Pandas测试

网上找到的一个利用Pandas比较两个Excel差异的例子,命令行,执行成功

这里就先放个执行截图,具体软件的介绍留着下次再详细介绍吧。

MacOS 下Nuikta编译PyQt5程序碰到的坑

生成的output.xlsx总共有3个sheets,分别是removed,added,changed



如果喜欢的话,可以点[在看],或者打赏,如果有什么建议和意见,也欢迎留言,或者加我个人微信,


以上是关于MacOS 下Nuikta编译PyQt5程序碰到的坑的主要内容,如果未能解决你的问题,请参考以下文章

PyQt5,MacOS - 强制 GUI 坚持当前打开的桌面空间

在没有 Xcode 项目和其他应用程序的情况下,如何修改已编译 macOS 应用程序的样式?

PyQt5 macOS 使用

macOS下加载动态库dylib报"code signature invalid"错误的解决办法

在macos上基于python2.7安装PyQt5

在 macOS 上安装 pyqt5-tools