pyinstaller将yolov8识别sys转换成exe的问题

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

我使用 Pyinstaller 和 Python 3.9.13,当我使用这个命令“pyinstaller interface.py --onefile -w”时 要将项目转换为 exe 文件,我遇到了这个问题:

it is can not find ultralytics\yolo\..etc

it is can not find ultralytics\yolo\..etc

当我删除 --onefile 标志时,没有包含其他库的 ultralytics 文件夹。 有什么帮助吗?

注意:我使用resource_path()函数。

python pyinstaller yolov8
2个回答
1
投票

我遇到了同样的问题,并在 ultralytic 的 github 讨论部分发现了类似的问题。在那里,3月15日用户“dh031200”在这个link中的回答帮助我解决了这个问题。该用户描述的 5 个步骤也可以解决您的问题。在那里,仅在第 1 步将“从源安装 pip install -e '.[dev]'”更改为“从源安装 pip install -e .[dev]”,即应删除 .[dev] 周围的引号。


0
投票

我不确定这是否是最佳解决方案,但经过数小时的研究和试错运行,以下是我设法解决此问题的方法:

  1. 在 Pycharm 中输入“Ctrl+Shift+N”。在框中输入“ultralytics/utils/innit.py”(innit两边应该有2个下划线)(你可以去....Lib\site-packages\ultralytics\utils_init_.py)
  2. 找到并打开源文件后,您需要更改两件事: A。在第 #233 行添加这两行 sys.stdout = open(os.devnull, "w") sys.stderr = open(os.path.join(os.getenv("TEMP"), "stderr- "+os.path.basename(sys.argv[0])), "w") b.在第 #37 行,将 DEFAULT_CFG_PATH 更改为 `DEFAULT_CFG_PATH = "default.yaml" # 将其更改为工作目录,以便 .exe 不会继续寻找它。

或者你可以这样做: 第 35 行:DEFAULT_CFG_PATH = ROOT / 'cfg/default.yaml' 更改:DEFAULT_CFG_PATH = os.path.join(os.getcwd(), 'default.yaml')

  1. 在使用 Pyinstaller 冻结之前,请确保将“default.yaml”的副本放置到 Pycharm 上的工作目录中:https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/default.yaml
  2. 我使用此命令冻结我的代码:pyinstaller --onefile --windowed --add-data="best.pt;"。 --add-data="default.yaml;。" main.py -->您需要确保明确添加default.yaml,就像您添加最佳权重一样。

pyinstaller --onefile --windowed --add-data="best.pt;。" --add-data="default.yaml;。"主要.py

或者: pyinstaller --onefile --windowed --add-data="default.yaml;。"主要.py

  1. 创建 .exe 时,请确保“default.yaml”存在于您将运行可执行文件的目录中。在EXE文件中 6.最后一步对于您的情况可能不是必需的,但对于我的情况却是必要的。当通过 GUI 对模型进行推理时,可执行文件会运行多次。我补充道:

从多处理导入 freeze_support if name == "main":

 freeze_support()

或者: 导入多重处理

在主程序 if name == "main": multiprocessing.freeze_support()

在我的导入声明之后就解决了它。再说一遍,上面是我从各处废弃的解决方案的汇编,可能不是最好的路径,但它让我走到了最后。希望有帮助

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