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

Python 3.6中ModuleNotFoundError: No module named 'tests'问题排查

解决ModuleNotFoundError: No module named 'tests'及代码中的其他问题

看起来你遇到的问题主要集中在导入路径错误,还有几个小的代码逻辑问题,我一一给你拆解:

1. 核心问题:找不到tests模块的原因

你的项目结构里,backend和tests是同级的根目录文件夹,但server.py在backend内部。Python默认只会把当前脚本所在的文件夹(也就是backend)加入到模块搜索路径里,所以它找不到同级的tests文件夹。另外你写的导入语句里还多了一个不存在的linear_regression子目录,你的linearregression.py明明直接在tests下面对吧?

2. 修复步骤

第一步:修正导入逻辑,把根目录加入搜索路径

在server.py的最开头添加代码,让Python能找到项目根目录下的tests文件夹,同时修正错误的导入路径:

from flask import Flask
import sys
import os

# 获取项目根目录(backend文件夹的父目录)
root_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(root_dir)

app = Flask(__name__)
# 注意:你的linearregression.py直接在tests下,没有linear_regression子目录
from tests.linearregression import predict

第二步:修复变量与函数重名的问题

你在server.py里定义了def predicted_value():,但之前已经有一个同名变量predicted_value = returned_values[3]——这会导致后续调用函数的时候直接拿到变量值,而不是函数。把函数名改个不一样的,比如:

# 把原函数名predicted_value改成get_predicted_value
def get_predicted_value():
    return predicted_value

然后在路由里对应修改调用:

predicted_val = get_predicted_value()

第三步:修复字符串拼接的错误

你的路由返回里犯了个小错误:直接用了函数名(比如price)而没有调用它(price()),这样返回的是函数对象的字符串,不是你要的数值。另外用f-string来拼接HTML会更清晰不易错:

@app.route('/')
def hello_world():
    price_val = price()
    gradient_val = gradient()
    intercept_val = intercept()
    predicted_val = get_predicted_value()
    return (f"<h1>Price is: </h1><p>{price_val}</p><br>"
            f"<h1>Gradient is: </h1><p>{gradient_val}</p><br>"
            f"<h1>Intercept is: </h1><p>{intercept_val}</p><br>"
            f"<h1>Predicted value is: </h1><p>{predicted_val}</p>")

第四步:确认__init__.py的有效性

你已经在backend和tests文件夹里都放了__init__.py,这很好,Python会把它们识别为可导入的包,这部分不用改。

3. 额外建议

如果你的项目是一个标准的Python包结构,也可以考虑用相对导入或者把项目根目录设为Python的环境变量PYTHONPATH,不过上面的方法已经能快速解决你的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 11:57:43