pyinstaller打包exe踩坑记录
pyinstaller版本过低或过高导致的问题
版本过低的pyinstaller,如3.6版本,在打包过程中会产生很多奇怪的问题,可以尝试一下将版本更新成4.5.1。值得注意的是高版本不一定好,可能会有一些bug存在,如在使用5.6版本的时候,运行exe时产生错误 TypeError: startswith first arg must be str or a tuple of str,最终采用4.5.1版本解决了这个错误
当主文件中有自建模块导入时,产生错误Module not found
建议将自建的py模块放入一个自建包中,即新建文件夹,并在文件夹中添加空白__init__.py文件,使文件夹变成包,将自建模块放入包中,打包时采用命令
pyinstaller -F main.py -p 自建包绝对路径
打包成exe文件后执行失败FileNotFoundError
打包时出现报错UnicodeDecodeError: ‘utf-8’ codec can’t decode byte
打包完成后将exe转发至他人电脑运行报错ImportError: Could not find ‘nvcuda.dll’.
2024年实验室某项目开发中出现这种错误是由于开发深度强化学习算法时使用了tensorflow-gpu版本,而对方电脑并没有安装支持GPU调用的cuda动态链接库,此时虽然在代码中显式地指明使用CPU:
os.environ["CUDA_VISIBLE_DEVICES"]="-1"
但仍然产生此报错,此时建议手动添加此动态链接库,这个文档一般都会保存在‘C\Windows\System32’中,此时采用指令:
pyinstaller --onefile --add-binary "C:\\Windows\\System32\\nvcuda.dll;." -F main.py -p 自建包的绝对路径
如果仍然报错,尝试采用:
pyinstaller --onefile --add-binary "C:\\Windows\\System32\\nvcuda.dll;." -D main.py -p 自建包的绝对路径