《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)
运行截图如下:
打包分析如下:
- tensorflow是一个相对来说比较大的第三方库,而且我们这个程序也没有用到其他库,所以我们用--nofollow-imports命令来避免引入过多的依赖,从而减少打包所需的时间。
- 如果用了--nofollow-imports,那么tensorflow的库是不会自动被添加到hello.dist文件夹中的,当然我们可以在打包之后手动复制进去。第一次打包我们先用这种方法。
- 也可以先去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
- 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的主要内容,如果未能解决你的问题,请参考以下文章