《Nuitka打包实战指南》第七节 启用插件

Posted 一路顺风呀~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《Nuitka打包实战指南》第七节 启用插件相关的知识,希望对你有一定的参考价值。

第七节 启用插件

目录

7.1 Nuitka提供了哪些插件

7.2 第三方库打包示例

7.3 一定要启用插件吗


我们在第四节打包以下程序代码时,使用了--enable-plugin=tk-inter命令将tkinter这个标准库打包了进来。

import tkinter
 
win = tkinter.Tk()
win.iconbitmap('./disk.ico')    # 设置窗口图标为当前路径下的disk.ico
win.mainloop()

在打包一些标准库和第三方库时,我们需要添加--enable-plugin命令。该命令会让Nuikta启动相关插件将库所用到的一些依赖一起打包进来

不添加--enable-plugin命令的话,我们在打包期间,Nuitka会显示一个警告,提示我们需要启用某插件 (这一点非常友好)。打包结束,可执行文件运行时就也会报找不到文件或者文件没有安装好等错误。

那在本节,笔者就带大家详细了解下如何开启相关插件,让大家避雷。

7.1 Nuitka提供了哪些插件

第三方库的数量非常多,所以不是所有库都有插件可用。我们可以用--plugin-list命令来看下Nuitka目前为哪一些库添加了插件支持。

nuitka --plugin-list

可以看到一些比较难打包的库如PyQt,PyTorch,Tensorflow等都有插件来支持。那读者要打包PyQt5的话,就一定要加上--enable-plugin=pyqt5这个命令。

注:并不是所有的标准库和第三方库在打包时都需要插件支持 (也就是说不用--enable-plugin命令就可以打包成功),所以读者不要以为没有找到相关库的插件的话,就无法打包哦。

7.2 第三方库打包示例

这里笔者就用一个PyQt5小程序来演示下,更多详细复杂的打包示例可以去之后的实战篇中阅读。

程序代码如下:

import sys
from PyQt5.QtWidgets import QApplication, QLabel

if __name__ == '__main__':
    app = QApplication(sys.argv)
    label = QLabel('Hello World')
    label.show()
    sys.exit(app.exec_())

程序运行截图如下:

 打包命令如下:

nuitka --standalone --enable-plugin=pyqt5 hello.py

注:如果没有加--enable-plugin=pyqt5,那么Nuitka就会发出警告,提示你需要使用该命令。没有使用的话打包后的程序也会相应的报错了。

打包完毕后,可以发现hello.dist文件夹中多了一个PyQt5文件夹,里面是PyQt5的一些依赖文件。

 程序也是可以正常运行的。

7.3 一定要启用插件吗

一些第三方库比如Numpy、Tensorflow,它们的源码中是还会引入其他第三方库的。如果在打包这类第三方库时添加了--enable-plugin命令,那么打包时间可能会非常非常非常地长 (没有丝毫夸张的意思) 。更悲惨的是,你最后可能还打包失败了。

读者可以尝试打包下面的numpy程序:

import numpy as np
a = np.array([[1,  2],  [3,  4]])
print(a)

用以下命令开始打包:

nuitka --standalone --enable-plugin=numpy hello.py

读者会发现打包过程异常漫长:

 当碰到这种情况时,建议立马Ctrl+C强制终止打包。

我们此时要做的就是用--nofollow-imports命令来禁止打包所有打包的库,加快打包进程。那程序用到的库要怎么添加进来呢?有以下两种方法:

  1. 打包完毕后手动将相关库复制到hello.dist文件夹下。
  2. 先将相关库复制到项目路径下,然后使用--include-data-dir命令将它们打包进来。如果你使用的是--onefile命令,那就必须要用这种方法。

所以之前的打包命令可以修改为 (手动复制numpy库):

nuitka --standalone --nofollow-imports hello.py

或者 (先复制numpy到项目路径下,然后用--include-data-dir直接打包进来):

nuitka --standalone --nofollow-imports --include-data-dir=./numpy=./numpy hello.py

具体实战演示可以看《Nuitka打包实战指南》实战打包Numpy_热爱代码-CSDN博客 

以上是关于《Nuitka打包实战指南》第七节 启用插件的主要内容,如果未能解决你的问题,请参考以下文章

《Buildozer打包实战指南》第七节 打包资源文件

《Buildozer打包实战指南》第七节 常见的打包问题

《Buildozer打包实战指南》第七节 常见的打包问题

《Nuitka打包实战指南》实战打包PyGame

《Nuitka打包实战指南》实战打包PyGame

《Nuitka打包实战指南》