Pyinstaller打包报错小结
问题目录
1.Pyinstaller打包exe文件,执行后提示缺失yaml,csv,dll等资源文件。
2.打包后运行提示 WARNING: file already exists but should not: C:\Users\ADMINI~1\AppData\Local\Temp_MEI130922\torch_C.cp38-win_amd64.pyd。
3.运行exe闪退。
4.(ModuleNotFoundError: No module named 'tensorflow_core.python及FileNotFoundError:No such file or directory)。
5.pyimod04_ctypes.install..PyInstallerImportError: Failed to load dynlib/dll ‘C:\Users\Lenovo\AppData\Local\Temp\_MEI209562\MvCameraControl.dll’. Most likely this dynlib/dll was not found when the application was frozen.
解决方法
问题一:
pyinstaller -F main.py
打包后(我是在conda环境里面打包的,据说打包效果好。当然也可以用pycharm里面用Terminal命令行),会自动打包main.py文件引用的所有.py文件(仅限py文件),其他的资源文件需要在生成的main.spec文件中手动导入。
a = Analysis( ['open_camera_main.py'], pathex=[], binaries=[], datas=[ **('..\\ultralytics\\yolo\\cfg\\default.yaml', 'ultralytics\\yolo\\cfg'), ('C:\\Program Files (x86)\\Common Files\\MVS\Runtime\\Win64_x64','.'), ('..\\best.pt','.'), ],** hiddenimports=[], hookspath=[], hooksconfig={}, runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False, )
例如,datas[]第一个配置格式 (‘path’ ,‘path’)分别是本地的路径(可以用绝对路径,这点无所谓)和exe运行后的虚拟路径,‘.’就是将资源文件放在根目录下,并且本文引用的第二个data,可以将一个文件夹全部引用。第三个是训练好的模型文件。
问题二:pyinstaller工具内部bug据说,解决方法也很简单,就是在生成的main.spec文件中复制以下代码。(我是提示了两次,具体我也没明白,直接写了两个函数),说白了就是跳过报错。
for d in a.datas: if 'cp38-win_amd64.pyd' in d[0]: a.datas.remove(d) break for d in a.datas: if 'cp38-win_amd64.pyd' in d[0]: a.datas.remove(d) break
问题三:在生成的main.spec文件中将console赋值True,这样可以在exe运行时查看报错。(当然打包之前也可以直接-c打包,不过后期偷懒)
exe = EXE( pyz, a.scripts, a.binaries, a.zipfiles, a.datas, [], name='main', **debug=True,** 可以debug bootloader_ignore_signals=False, strip=False, **upx=True,** 打包用的 upx_exclude=[], runtime_tmpdir=None, **console=True,** disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, )
问题四:打包的时候会遇到很多module和包,或者FileNotFoundError:No such file or directory。很暴力的方法就是在生成的dist文件夹下边将这些资源文件直接复制进去即可。讲究一点的话,还是查看本地的环境是否配置了资源文件。
问题五:dll资源我放在data里面,显示错误加载,然后我在代码里面修改了引用语句,解决了
MvCamCtrldll = os.path.join(os.getcwd(), "MvCameraControl.dll")
之前用的:
MvCamCtrldll = WinDLL("MvCameraControl.dll")
Tips:1.据说用conda虚拟环境打包效果会更好。
2.还有就是打包之前运行 pyinstaller -F main.py 可能会提示一些错误,例如a/b/c/路径下面没有**.yaml文件,我们需要这样打包。
pyinstaller -F main.py --add-data=~/project/config/config.yaml**;**a/b/c/
到此这篇关于Pyinstaller打包报错小结的文章就介绍到这了,更多相关Pyinstaller打包报错内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Python连接Postgres/Mysql/Mongo数据库基本操作大全
在后端应用开发中,经常会用到Postgres/Mysql/Mongo这三种数据库的基本操作,今天小编就给大家详细介绍Python连接Postgres/Mysql/Mongo数据库基本操作,感兴趣的朋友一起看看吧2021-06-06利用pycharm调试ssh远程程序并实时同步文件的操作方法
这篇文章主要介绍了利用pycharm调试ssh远程程序并实时同步文件的操作方法,本篇文章提供了利用pycharm远程调试程序的方法,且使用的编译器可以是服务器中的虚拟环境的编译器,可以实时同步本地与服务器的文件内容,需要的朋友可以参考下2022-11-11
最新评论