为何终端可运行的YOLO Python文件在Flutter macOS应用中报错?
Flutter macOS调用YOLO Python脚本找不到torch的原因及解决
在Flutter macOS应用中使用process_run包执行YOLO的detect.py脚本时,出现ModuleNotFoundError: No module named 'torch',但终端直接执行相同命令却正常运行,核心原因是Flutter应用的运行环境与终端的Python环境不一致,具体分两点:
- 环境变量不继承:Flutter应用在受限环境(如沙箱)中运行,不会继承终端的完整环境变量。终端里的
python3可能指向已安装torch的版本(比如通过pyenv、Anaconda管理,或用户本地安装),而process_run默认调用的是系统自带的Python,该版本未安装相关依赖。 - 虚拟环境未激活:如果你是在虚拟环境中安装的torch,终端执行时已激活虚拟环境,但Flutter调用脚本时没有激活对应的虚拟环境,导致无法找到依赖包。
解决办法
- 使用Python绝对路径
先在终端执行which python3,获取能正常运行detect.py的Python绝对路径,替换代码中的python3:
_runPython() async { var shell = Shell(); await shell.run(''' /Users/yourname/.pyenv/shims/python3 yolov5/detect.py '''); }
- 激活虚拟环境后执行
如果使用了虚拟环境,先执行激活命令再运行脚本(假设虚拟环境目录为yolov5/venv):
_runPython() async { var shell = Shell(); await shell.run(''' source yolov5/venv/bin/activate && python3 detect.py '''); }
- 指定PYTHONPATH
将装有torch的site-packages目录添加到PYTHONPATH后执行:
_runPython() async { var shell = Shell(); await shell.run(''' export PYTHONPATH="/Users/yourname/Library/Python/3.9/lib/python/site-packages" && python3 yolov5/detect.py '''); }
内容的提问来源于stack exchange,提问作者greenzebra
相关产品推荐
相关产品推荐

