解决pyinstaller打包后运行出现ModuleNotFoundError的问题

这个问题在网上答案可能很多:

下面给出鄙人的经历和参考:该问题的核心可能是 没有安装lib造成的,那么你可能会问,”我已经安装了呀,并且pycharm运行正常~“

这里要注意:新版本的pycharm现在都会在开发目录下创建一个venv的文件夹, 您安装的lib有可能是在这个venv里面, 而不再全局的python安装目录里面!!

——-

然而,您使用的命令可能是基于 python安装目录里面 pyinstaller 。。

故,您只要打开python 的安装目录如:D:\python311\Scripts,,,在这个目录里打开cmd,如下图:

 再次执行缺失的  Module 的安装命令: ./pip3.exe install xxx 即可~  完后 ~

再次执行  pyinstaller  打包~~~ 码字真累!

—————

在这,码字累,但时间宝贵! 鄙人给出 个人使用的pyinstaller  打包命令, 您只要复制到bat文件里,改改icon, 和 入口文件 py_file 即可,参考如下

echo off

rem https://pyinstaller.org/en/stable/usage.html#options

rem 请把python:path/Scripts添加到系统路径
rem cxfreeze,pyinstaller都在这个路径下

rem !!!在windows下编写bat,路径使用[\],不要使用 [/]

rem py文件,不要带后缀[.py]
set curPath=%cd%

set py_file=main
rem 中间目录
set out_dir=.\dist
rem 自己的模块位置
set my_py_module_path=.\
rem 图标icon
set icon=%curPath%\main.ico
rem 解决:ModuleNotFoundError: No module named 'fastapi'
set hidden_import=--hidden-import=uvicorn --hidden-import=fastapi --hidden-import=main

echo %cd%

rem warning: 在执行完毕会删除中间目录,同时会把exe拷贝到上层目录
rem 所以建议把中间目录就设置在工作目录下

rem 文档:https://pyinstaller.readthedocs.io/en/v3.5/
rem LEVEL may be one of TRACE, DEBUG, INFO, WARN, ERROR, CRITICAL (default: INFO).
pyinstaller --onefile --nowindowed %hidden_import% --distpath=%out_dir% --workpath=%out_dir%\build --specpath=%out_dir%\build --path=%my_py_module_path% --name=%py_file%.exe -y --clean --log-level=INFO --icon=%icon% %py_file%.py 

rem 复制到当前目录
copy /Y /B %out_dir%\%py_file%.exe .\

rem 删除目录
rd /Q /s %out_dir%

echo "finish!"

rem --------------------
rem 下面的命令可以用
rem cxfreeze files_copy.py --target-dir ./build --include-path=../../ -O -OO -c --icon=copy.ico

注意在hidden_import隐藏了一个不能理解的module:–hidden-import=main

这一行是为了解决下面的这个错误:

参考:python – Running FastAPI multiple process error after pyinstaller – Stack Overflow

ERROR: Error loading ASGI app. Could not import module "main".

——–

打包后的exe, 在正式运行的时候,不能带有 reload=True , 否则会一直刷日志, 具体原因还不知晓~

物联沃分享整理
物联沃-IOTWORD物联网 » 解决pyinstaller打包后运行出现ModuleNotFoundError的问题

发表评论