已安装sklearn但Flask API启动报错:ModuleNotFoundError求助
解决Flask API加载Pickle模型时的
ModuleNotFoundError: No module named 'sklearn'问题 问题核心
报错原因是运行Flask的虚拟环境中未安装scikit-learn库。你提到已安装sklearn,但大概率是安装到了全局Python环境,而非项目专属的虚拟环境(报错路径明确显示使用的是venv\Scripts\python.exe)。另外注意:PyPI上的官方包名称是scikit-learn,直接安装sklearn只会得到一个无关的占位包,无法满足模型加载需求。
分步解决方案
激活项目虚拟环境
在命令行中执行对应路径的激活命令:C:\Users\rohit\PycharmProjects\PlacePredictor\venv\Scripts\activate激活成功后,命令行前缀会显示
(venv)标识。在虚拟环境中安装scikit-learn
执行标准安装命令:pip install scikit-learn如果你的模型是用特定版本的scikit-learn训练的,建议安装对应版本避免兼容性问题:
pip install scikit-learn==x.x.x(将
x.x.x替换为训练模型时使用的具体版本号)验证安装结果
执行以下命令确认scikit-learn已成功安装:pip list | findstr scikit-learn(Windows系统用
findstr,Linux/macOS环境替换为grep)
额外代码优化提示
你的predict函数中,request.form.get()获取的参数是字符串类型,直接传入numpy数组会导致模型预测报错,需要先转换为数值类型:
@app.route('/predict', methods=['GET', 'POST']) def predict(): try: cgpa = float(request.form.get('cgpa')) iq = float(request.form.get('iq')) profile_score = float(request.form.get('profile_score')) except (TypeError, ValueError): return jsonify({'error': '请输入有效的数值类型参数'}), 400 input_query = np.array([[cgpa, iq, profile_score]]) result = model.predict(input_query)[0] return jsonify({'placement': str(result)})
内容的提问来源于stack exchange,提问作者Rohit Prajapati
相关产品推荐
相关产品推荐

