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

运行导入同根目录其他模块的脚本时出现No module错误如何解决?

Python导包报错问题分析与解决

报错原因

Python 导入模块时会从 sys.path 存储的路径列表中搜索目标模块,直接运行单文件脚本时,Python 会自动将脚本所在的目录(也就是本场景下的 dir/tests/e2e_tests)加入 sys.path,但不会将执行命令的当前工作目录(即 dir 目录)加入搜索路径。subdir 模块存放在 dir 目录下,不在默认搜索路径中,因此触发 ModuleNotFoundError。

解决方案

可以按需选择以下任意一种方案解决:

  • 以模块形式运行脚本
    不要直接指定脚本文件路径运行,改用 -m 参数以模块方式执行,在 dir 目录下执行以下命令即可:
    python -m tests.e2e_tests.test1
    
    这种方式会自动将当前工作目录加入 sys.path,不需要修改代码或环境配置。
  • 代码内临时添加搜索路径
    在 test1.py 最开头添加代码,将项目根目录(dir 目录)手动加入 sys.path:
    import sys
    from pathlib import Path
    # 从test1.py所在路径往上跳3层,定位到dir目录
    project_root = Path(__file__).parent.parent.parent
    sys.path.append(str(project_root))
    
    添加后再运行原有命令即可正常导包。
  • 配置PYTHONPATH环境变量
    运行脚本前先将 dir 目录的绝对路径加入PYTHONPATH环境变量:
    • Windows cmd: set PYTHONPATH=你的dir目录绝对路径;%PYTHONPATH%
    • Windows PowerShell: $env:PYTHONPATH="你的dir目录绝对路径;$env:PYTHONPATH"
    • Linux/macOS: export PYTHONPATH=你的dir目录绝对路径:$PYTHONPATH
      配置完成后再执行原有运行命令即可。
  • 使用测试框架运行
    如果是测试代码,直接用pytest等测试框架运行即可,这类框架会自动将当前工作目录加入 sys.path,在 dir 目录下执行:
    pytest tests/e2e_tests/test1.py
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:54:04