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

Posted 一路顺风呀~

tags:

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

实战打包TensorFlow

打包示例源码:

请看文章末尾

版本信息:

tensorflow==2.3.0

Nuitka==0.6.19.1

打包系统:

 Windows10 64位

打包前我们需要运行下代码,确保没有报错。

注:针对该版本的tensorflow,电脑CPU必须支持AVX指令,否则会报ImportError: DLL load failed: 动态链接库(DLL)初始化例程失败这个错误 (具体请看这篇文章)。

hello.py代码如下:

import tensorflow as tf
mnist = tf.keras.datasets.mnist
 
(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
 
model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])
 
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
 
model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test)

运行截图如下:

打包分析如下:

  1. tensorflow是一个相对来说比较大的第三方库,而且我们这个程序也没有用到其他库,所以我们用--nofollow-imports命令来避免引入过多的依赖,从而减少打包所需的时间。
  2. 如果用了--nofollow-imports,那么tensorflow的库是不会自动被添加到hello.dist文件夹中的,当然我们可以在打包之后手动复制进去。第一次打包我们先用这种方法
  3. 也可以先去Python安装路径下的site-packages文件夹中把tensorflow这个库复制到项目目录下,然后用--include-data-dir打包进去。

打包命令如下:

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

打包结束后,运行hello.exe文件,发现闪退。于是将hello.exe文件拖入命令行窗口中回车运行:

按照提示我们去Python安装路径下的site-packages文件夹下复制tensorflow库到hello.dist文件夹中。

继续运行hello.exe后发现还差一些库或者模块,针对该程序,笔者一共复制了这些文件(夹):

  • tensorflow
  • absl
  • astunparse
  • gast
  • google
  • numpy
  • opt_einsum
  • wrapt
  • keras_preprocessing
  • six.py
  • termcolor.py

 现在运行hello.exe发现正常了。

大家可以重新打包,先把以上缺失的库或模块复制到项目路径下,然后使用--include-data-dir--include-data-file命令将它们一同打包进来。

打包示例源码下载:

链接:https://pan.baidu.com/s/1oKeWpq3ffbiV7XktJkA0wA 
提取码:vm73

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

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

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

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

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

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

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