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

Python模块导入报错:找不到src模块的原因及解决方法

问题原因

当你从外部模块执行from myproject.src import b时,Python将myproject.src识别为嵌套包,而b.py中使用的from src.a import some_class是绝对导入——此时src并非Python能直接定位的顶级包(除非myproject所在目录被加入Python的模块查找路径sys.path)。Python只会在当前工作目录、已安装库目录以及sys.path中的路径里寻找名为src的顶级包,自然找不到目标模块,因此抛出ModuleNotFoundError。

解决方法

以下是几种可行的解决方案,按需选择:

  • 使用相对导入(推荐):
    因为a.py和b.py在同一个src包下,直接在b.py中用相对路径导入:

    from .a import some_class
    

    这种方式不依赖外部路径配置,无论src包处于哪个层级,都能正确定位同目录的模块。

  • 使用完整绝对导入路径:
    如果偏好绝对导入,可写成从顶级包myproject开始的完整路径:

    from myproject.src.a import some_class
    

    前提是myproject所在的目录已被加入Python的sys.path(比如你在myproject的父目录下运行代码,或手动添加路径)。

  • 将myproject父目录加入模块查找路径:
    有两种实现方式:

    1. 代码中手动添加:在导入b之前执行
      import sys
      from pathlib import Path
      sys.path.append(str(Path(__file__).parent.parent))  # 假设当前文件在myproject父目录下
      
    2. 设置环境变量:以Linux/macOS为例,终端执行
      export PYTHONPATH="/path/to/myproject/parent/directory:$PYTHONPATH"
      
      之后再运行导入代码,src会被识别为myproject的子包,b.py中的原有导入语句即可生效。
  • 补充包标识文件:
    在src目录下创建空的__init__.py文件,虽然Python 3.3+支持无该文件的命名空间包,但添加后能明确标识src是Python包,避免潜在的路径识别问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:45:54