项目场景:
其他项目需要开发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说明这种方法可以解决我们的问题; 我们继续添加我们缺少的包,因为这里确认的包也是刚才缺少的包的目录,所以我打算直接把这个包加到目录下的所有包里; 我们修改包装生成 文件(在包装文件的统计目录下),这是包装信息文件,将首先创建,然后更新build文件夹和生成dist文件夹。我们可以修改这个文件,把我们缺少的包放到这个数组里面
修改本文件中的内容 这一行
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