为什么我的 python 文件会通过终端命令运行,但当我在 Flutter macos 应用程序中的函数内运行相同的命令时却不能运行?

问题描述 投票:0回答:1

我想在我的 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 应用程序运行?

python flutter pytorch torch yolo
1个回答
0
投票

可能是,

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 声誉来将其作为评论发布到您的帖子,因此我将其发布为答案。希望这有帮助:)

© www.soinside.com 2019 - 2024. All rights reserved.