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

GitHub Actions运行pytest无法导入src模块报ModuleNotFoundError如何解决

认知误区澄清

你确实存在相关认知误区:pip install .不会自动识别项目内所有目录作为Python模块安装,能否正确安装本地模块完全取决于你根目录下setup.py/setup.cfg的打包配置,没有正确配置src目录的打包规则时,执行完该命令也不会将src目录注册到Python的模块搜索路径中,测试时自然找不到对应的模块。
你写的python -m pip install src是完全无效的操作,src是本地目录而非PyPI上的公开包,执行该命令不会产生任何实际效果。

问题根本原因

pytest默认不会自动将项目根目录加入Python的模块搜索路径,你直接执行pytest命令时,Python只会从系统预装包、pip安装的第三方包、当前测试文件所在的utils目录搜索模块,找不到根目录下的src文件夹,因此抛出ModuleNotFoundError。
你去掉导入语句的src前缀也无法解决问题,因为capital.py文件存放在src目录下,不在Python的搜索路径范围内。

解决方法

你可以任选以下任一方案修复问题:

  • 方案1:修正打包配置,确保pip install .可以正确安装src下的模块
    调整你的setup.py配置,添加src目录的打包规则,示例如下:
    from setuptools import setup, find_packages
    
    setup(
        name="example-package",
        version="0.1",
        packages=find_packages(where="src"),
        package_dir={"": "src"},
    )
    
    配置正确后,执行pip install .就会自动将src下的模块安装到当前Python环境中,无需额外配置即可正常导入。
  • 方案2:临时将项目根目录加入Python搜索路径(无需修改打包配置)
    调整ci.yml中pytest的执行命令,Windows环境下修改为:
    - name: Test with pytest
      run: |
        python -m pip install pytest
        $env:PYTHONPATH = "."
        pytest
    
  • 方案3:给pytest添加根目录参数
    直接修改执行命令为python -m pytest --rootdir=.,pytest会自动将指定的根目录加入搜索路径。

最后统一删除ci.yml里无效的python -m pip install src命令,避免不必要的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:15:03