锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

python打包exe执行报错 Importing library xxx failed: Module does not contain xxx:解决方案

时间:2022-10-21 20:00:01 bdt64c晶体管

项目场景:

其他项目需要开发rpa,使用了python读取文件,使用robotFramework框架;同事在开发过程中遇到了包装问题,卡了四五天,因为不耽误开发进度,一直丢在哪里;昨天忙完手头的事,今天就帮她看看。
开发工具:pycharm
python版本:3.7.13
pyinstaller版本:5.1
详情如下:
在这里插入图片描述

问题描述

编译开发正常,包装正常.exe之后,运行异常

(learn) PS C:\Users\DELL\Desktop\root\dist> .\app-bak.exe start [ ERROR ] Importing library 'robot.libraries.BuiltIn' failed: Module 'robot.libraries' does not contain 'BuiltIn'.  Try --help for usage information. end --- 

原因分析:

初步分析:
提示robot在第三方库中确认module:builtin,我先去本地在第三方库中确认了一下是不是安装的包的版本问题,导致文件缺失;

python安装的第三方仓库一般在site-packages目录下


解决方案:

发现提示报错module存在,可以断定是包装问题,包装时不扫描或扫描项目引用时不扫描;
然后百度参考了一下pyinstaller包装命令发现了这样一句话

这个和我的情况很符合,第三方包引用的包,然后本地项目打包没有打进去,然后更换打包命令

 pyinstaller -F .\app-bak.py --hidden-import=robot.libraries.BuiltIn --加上上面报错的包,重新打包 -- 再次打包.exe文件  (learn) PS C:\Users\DELL\Desktop\root\dist> .\app-bak.exe start [ ERROR ] Importing library 'robot.libraries.Reserved' failed: Module 'robot.libraries' does not contain 'Reserved'.  Try --help for usage information. end 

重新包装后,再次执行,发现仍然缺乏报错module,但不是以前缺失的module说明这种方法可以解决我们的问题;
我们继续添加我们缺少的包,因为这里确认的包也是刚才缺少的包的目录,所以我打算直接把这个包加到目录下的所有包里;
我们修改包装生成 .spec 文件(在包装文件的统计目录下),这是包装信息文件,将首先创建,然后更新build文件夹和生成dist文件夹。我们可以修改这个文件,把我们缺少的包放到这个数组里面


修改本文件中的内容 hiddenimports 这一行

hiddenimports=['robot.libraries.BuiltIn','robot.libraries.Reserved','robot.libraries.Collections','robot.libraries.Easter','robot.libraries.OperatingSystem','robot.libraries.DateTime','robot.libraries.Dialogs','robot.libraries.Process','robot.libraries.Remote','robot.libraries.Screenshot','robot.libraries.String','robot.libraries.Telnet','robot.libraries.XML'], 

修改后,用这个.spec文件重新打exe的包

(learn) PS C:\Users\DELL\Desktop\root>/span> pyinstaller .\app-bak.spec --使用spec文件打包 (learn) PS C:\Users\DELL\Desktop\root\dist> .\app-bak.exe --运行.exe文件查看报错 start ============================================================================== Demo2 ============================================================================== demo2 | PASS | ------------------------------------------------------------------------------ Demo2 | PASS | 1 test, 1 passed, 0 failed ============================================================================== Output: C:\Users\DELL\Desktop\root\dist\output.xml [ ERROR ] Unexpected error: FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\DELL\\AppData\\Local\\Temp\\_MEI194762\\robot\\htmldata\\rebot\\log.html' Traceback (most recent call last): File "robot\utils\application.py", line 81, in _execute File "robot\run.py", line 456, in main File "robot\reporting\resultwriter.py", line 63, in write_results File "robot\reporting\resultwriter.py", line 77, in _write_log File "robot\reporting\resultwriter.py", line 84, in _write File "robot\reporting\logreportwriters.py", line 43, in write File "robot\reporting\logreportwriters.py", line 36, in _write_file File "robot\htmldata\htmlfilewriter.py", line 33, in write File "robot\htmldata\template.py", line 27, in __iter__ FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\DELL\\AppData\\Local\\Temp\\_MEI194762\\robot\\htmldata\\rebot\\log.html' end 

重新打包后,发现没有再报缺少module的报错了,报的文件不存在;问题解决完毕;希望对各位同僚能有所帮助,大家一起进步


参考文章

pyinstaller打包讲解
python封装成exe后运行失败_Python的带pandas包的程序封装成exe 2018-01-11

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章