更新:打包后运行exe提示no model named usb,同样把site-packages下USB文件夹拷到打包的根目录,打包后exe是能正常打开的。但是实际上USB无法正常使用,提示Nobackendavailable。查了资料,原因是缺少libusb*.dll。网上解决办法也很多,大多比较复杂。这里依旧简单粗暴,把libusb0.dll拷贝到打包后的Mainwindow根目录下,USB通信不再报错。

(检索libusb0.dll可用Everything,超级好用)

作为一个硬件工程师,最近不务正业搞了个三轴机械臂工装,搞了底层MCU代码,上位机用python开发。

此前python仅用于工作中的数据处理,这是第一次正经用python写上位机,因此需要打包成exe可以给其他人用。

代码用pycharm写的,打包需要先“win+r”,运行cmd,通过“pip install pyinstaller”来安装这个打包工具。

网上打包的方式大概看了下,主流有两种,一种是直接pyinstaller -F main.py -p xxx.py打包,打包后main.exe自己独立在dist路径下,其他文件依旧在外面。另一种是先生成.spec中间文件,通过修改这个spec再来打包成最终的exe。

试了两种方式,第一种自己其实也会生成spec,但是打包后文件太乱,不好传递给别人,这里选择第二种。

打包后长这样

这里我的主文件是Mainwindow.py,其他文件放在Mechanical_arm里面。

cd进这个目录,执行pyi-makespec Mainwindow.py,生成spec文件。打开spec文件,

这里需要修改的只有红框处,把你需要打包的其他副文件一起包进去,如果跟Mainwindow在同一路径下则不需要加路径。然后在同一路径下,再执行pyinstaller -D Mainwindow.spec

打包完成后,在dist\Mainwindow可以找到这个可执行文件。给别人时,整个Mainwindow拷贝走就好,很方便。

双击这个exe运行我们的程序, 很完美,一个乌漆嘛黑的调试窗口一闪而过,如果不是我眼睛采样率够高,我都不知道它实际是有反应的。发生了什么错误呢?不知道...

旁边坐了一个软件的同事,随口问了下他打包python后执行一闪而过,怎么处理。他告诉我用截图工具,在窗口一闪而过时把它截图截下来,看下报错内容是什么。好家伙,这是要拼手速,窗口停留时间目测在0.5s内啊!截了几次,总算截到一点,看到“most call...”没了...遂百度,方法一是在main文件里加一个输入语句input("please input any key to exit!"),方法二是直接cd进目录,用'.\xxx.exe'执行。直接采用方法二,总算看到了,原来是no model named serial。

早就听说这个打包工具常丢包,这是把串口包给丢了。遂百度,各种 -p xxx ----hidden-import xxx 试了各种方式,包括增加环境变量把模块路径\Lib\site-packages,无果,依旧提示找不到。

直接把site-packages目录下的serial文件夹拷贝到打包的根目录一试,竟然OK了...

记录于此,当做自己的调试笔记吧

不定期更新技术文章