You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python导入跨目录子包报ModuleNotFoundError的解决方案问询

解决方案

根因说明

报错核心原因是Python的模块搜索路径(sys.path)默认只包含运行命令时的工作目录(也就是main_dir),而exp.py中的导入语句是将models、utils作为顶层包引用的,这两个包实际存放在yolov5目录下,不在默认搜索路径中,因此无法被识别。

以下是两种不需要修改yolov5内部导入语句的可行方案:

方案1:修改运行命令,临时添加模块搜索路径(最推荐)

运行时通过PYTHONPATH环境变量将yolov5目录加入模块搜索路径即可,无需修改任何代码:

  • Linux/macOS 终端执行:
    PYTHONPATH=./yolov5 python -m api.api
  • Windows CMD 执行:
    set PYTHONPATH=./yolov5 && python -m api.api
  • Windows PowerShell 执行:
    $env:PYTHONPATH="./yolov5"; python -m api.api

方案2:在项目入口文件中手动添加搜索路径

如果不想每次运行都加环境变量,可以在入口文件api/api.py的所有导入语句前添加以下代码,一次性把yolov5目录加入搜索路径:

import sys
from pathlib import Path
# 拼接得到yolov5目录的绝对路径,加入sys.path
sys.path.append(str(Path(__file__).parent.parent / "yolov5"))

该方案仅需要修改入口文件的3行代码,不需要改动yolov5目录下的任何文件。

不推荐的方案:调整工作目录

如果直接将工作目录切换到yolov5下运行,会导致api、service这两个在main_dir下的包无法被搜索到,需要额外把main_dir也加入搜索路径,反而更复杂,不建议使用。

内容的提问来源于stack exchange,提问作者Ckay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 22:36:03