运行PyInstaller打包生成的exe文件时报No module named 'pyutil'错误
问题原因
- 核心原因是执行打包命令时调用的PyInstaller不属于当前激活的虚拟环境,从打包日志可以看到PyInstaller的 bootloader 路径为
c:\python38\lib\site-packages\PyInstaller\,对应全局Python环境,而pyutil模块是安装在当前venv虚拟环境下的,全局环境中并没有该模块。即使添加了--hidden-import=pyutil参数,全局PyInstaller也找不到对应的模块文件,无法将其打包进最终的exe中,运行时就会抛出模块找不到的错误。 - 次要可能原因:如果
pyutil是你自己在项目中编写的本地模块而非pip安装的第三方库,打包时没有指定项目根目录作为模块搜索路径,也会导致PyInstaller无法识别到该模块。
解决步骤
- 第一步:清理历史打包缓存,删除项目目录下的
build、dist文件夹,以及后缀为.spec的配置文件。 - 第二步:确认使用的是虚拟环境内的PyInstaller,激活venv后执行如下命令卸载全局PyInstaller、安装虚拟环境内的PyInstaller:
pip uninstall pyinstaller -y pip install pyinstaller
安装完成后执行where pyinstaller,确认返回的路径在当前项目的venv\Scripts目录下即可。
- 第三步:确认pyutil模块已在虚拟环境中安装,执行如下命令校验:
pip list | findstr pyutil
如果没有返回结果,执行pip install pyutil安装对应模块。
- 第四步:如果pyutil是自行编写的本地模块,打包时需要额外添加
-p参数指定项目根目录作为模块搜索路径,最终打包命令如下:
pyinstaller -F --hidden-import=pyutil -p E:\workspace\PycharmProjects\google-authenticator google-authenticator.py
如果是第三方模块直接使用原有打包命令即可:
pyinstaller -F --hidden-import=pyutil google-authenticator.py
- 第五步:打包完成后重新运行dist目录下的exe文件即可正常执行。
内容的提问来源于stack exchange,提问作者tianwen yuan
相关产品推荐
相关产品推荐

