我想在我的 Flutter macos 应用程序中执行 python 代码来运行 YOLO 对象检测模型。
我正在使用 https://pub.dev/packages?q=process_run 包来执行 shell 命令。 该包可以工作,并将运行一个带有简单打印功能的 python 文件,但不是我的对象检测文件。
我已将 https://github.com/ultralytics/yolov5 克隆到我的应用程序中。
在我的 flutter 应用程序中,我有一个功能:
_runPython() async {
var shell = Shell();
await shell.run('''
python3 yolov5/detect.py
''');
}
当我调用 _runPython 时,出现错误:
Traceback (most recent call last):
File "yolov5/detect.py", line 39, in <module>
import torch
ModuleNotFoundError: No module named 'torch'
但是,当我在终端中运行
python3 yolov5/detect.py
时,代码执行得很好。
查看应用程序内的 python 文件,我没有看到任何错误,并且所有内容似乎都已导入。
为什么我的 detector.py 通过终端而不是我的 Flutter 应用程序运行?
可能是,
var shell = Shell();
使用的 shell 没有与您的终端(您所说的它工作的那个)相同的 ENV 变量,因此 pip 已安装的软件包不在该 shell 的 PATH 中。
我认为,MacOS 上的 process_run 使用“默认登录 shell”从(我的 mac 上的/bin/zsh)运行其命令,但您可能在终端中使用不同的 shell,其中 pip 的依赖项安装位置位于它的路径。尝试编辑默认 shell 的配置(在我的例子中为 ~/.zshrc),使其具有与其工作的 shell 相同的 ENV 变量和相同的 PATH。
您可以在终端应用程序的设置中查看默认和当前选择的 shell(来自 MacOS Ventura 的屏幕截图)
附注我没有复制这个问题,但我没有足够的 StackOverflow 声誉来将其作为评论发布到您的帖子,因此我将其发布为答案。希望这有帮助:)