使用pyinstaller制作多文件的深度学习的python代码的打包exe

我的demo在文件夹里,所以我在执行pyi-makespec -W demo_ test.py出现spec文件之后,又在根目录复制了一模一样的demo, 后面开始制作exe。分为两种命令情况:

(1) pyinstaller -hidden-import=pkg_ resources -F demo_test.py

这种命令执行完之后会把spec文件里面的参数重置,如果在命令里面加了相应的引用,比如–add-data=C:\Users\shuo\Desktoplmaster’lcheckpointsl;checkpoints --add- data=C:\Users\shuo\Desktoplmastertfrecords);tfrecords这些,所生成的软件里面就会带有相应的文件,如果不写,那么就把相应的图片以及模型拷到相应的路径就行,比如我的checkpoints以及tfrecords, 这两个是需要被调用的。执行完生成程序后,会在dist文件夹出现你生成的exe。

(2) pyinstaller -F demo_ test.spec

使用这个命令,要注意更改demo_ test.spec里面相应的依赖, 这个命令不会重置spec文件,一 般binaries=0用于添加II依赖, 但是我添加后显示调用不成功。datas=用于调用相应的图片等数据,其他的就不用了改了。最后运行pyinstaller -F demo_ test.spec, 同样的,dist文件夹就会出现带有各种依赖的很多数据的一-个exe文件夹。

自己电脑测试:

命令(1) 测试成功,和预期效果- -样。

命令(2)显示出错,后来找到原因是因为我拷贝了demo到根目录,但是我没有更改checkpoints的调用路径,所以程序找不到checkpoints,从而出错。

别人电脑测试:

由于解决了上诉问题,所以只测试一 种exe就行,我选择了pyinstaller idden-import=pkg_resources -F demo test.py生成的exe进行测试,因为这种exe会直接把错误报出来。在测试后发现提示缺少 nvcuda.dll, 我用regsvr32注册,命令执行失败,会有提示窗口信息: "nvcuda.dIl加载失败, 找不到指定的模块”,我也是查找了好多资料,但是都是别人使用或者安装tensorflow时出现的错误, 还有就是别人的游戏控件提示显示缺少nvcuda.dll,我都试了一下,但是发现都不行,也有人说MSVBCRT AIO可以安装并注册nvcuda.dlI但是对于我也是没有太多帮助。

最后偶然看到一篇博客给了我灵感,这里附上链接:

https://blog.csdn.netxz1308579340/article/details/84335487,
这个是原话:在A电脑上编译的可以在A运行,但是到B就不能运行了,多数情况下是因为dll依赖于一 些文件,这些文件存在于A,但是不存在于B。 所以我们需要在A上找到需要的文件,复制到B上,就可以解决这个问题。

但是如何查看dIl的依赖呢,这就需要用到depend walker (dependency walker) DLL查看分析工具,打开dll后界面是这样的:在这里插入图片描述

将里面的依赖名称复制,并在有开发环境的电脑上的system32文件夹寻找,将相应的文件拷贝到测试的电脑的对应目录就行,然后需要注册nvcuda.dII,就可以使用regsvr32注册,但是会提示dl已加载,但是找不到入口点,这时,我参考了这篇博客: htps:s/blog.csdn.net/guanjintao/article/details/86246976, 里面提到了以管理员身份运行“命令提示符粘贴以下命令并执行:

dism /online /Cleanup-mage /RestoreHealth & sfc /SCANNOW?& for %d in (%windir%\system321*.dIl) do%windir%\system32lregsvr32.exe /s %d
其实这就是把system32里面的dll全部重新注册一遍,执行完毕之后,就不报错了。
但是点击运行后出现了这个错误:
InvalidArgumentError (see above for traceback): Default MaxPoolingOp only supports NHWC on device [[Node: ssd_300_vgg/pool1/MaxPool = MaxPoolT=DT_FLOAT, data_format=“NCHW”, ksize=[1, 1, 2, 2], padding=“SAME”, strides=[1, 1, 2, 2], _device="/job:localhost/replica:0/task:0/device:CPU:0"]]
于是我又回到源码中查看,我一开始修改了data_format,但是还是同样报错。后来经过谷歌后,参考了github上的一个建议,附上链接https://github.com/tensorflow/benchmarks/issues/82,建议是
@tfboyd @reedwm
Thank you!
–device=cpu --data_format=NHWC works for me.

I would suggest that --device=cpu --data_format=NHWC should be the default when --num_gpus option is 0 or is not there.

我实际上在我的程序里是这样写的:
device=‘cpu’
data_format=‘NHWC’,
操作完之后,再生成exe就可以实现无错误运行了,躺坑结束。

一起开启新世界的大门吧😊

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lindsayshuo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值