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

将Flask机器学习应用部署至Streamlit时遇ModuleNotFoundError求助

解决Streamlit部署时的ModuleNotFoundError及后续问题

核心原因

这个错误是因为Python导入路径与运行环境不匹配:Heroku上Flask的运行上下文默认把项目根目录作为模块搜索路径,而Streamlit运行时的工作目录或路径配置不同,导致找不到app模块。

分步解决方案

1. 修正导入语句

由于run.py和classDefs.py处于同一app目录下,直接移除导入语句中的app.前缀即可:

from classDefs import ItemSelector, tokenize, StartingVerbExtractor, MessageLengthExtractor

2. 强制添加项目根目录到Python路径

如果修正导入后仍有模块找不到的问题,在run.py的最开头添加以下代码,确保Python能识别项目根目录下的模块:

import sys
import os
# 将项目根目录(app目录的上级目录)加入搜索路径
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

3. 规范Streamlit运行命令

必须从项目根目录执行Streamlit启动命令,避免路径混乱:

streamlit run app/run.py

不要进入app目录后再运行streamlit run run.py,否则Python会把app目录当作当前工作目录,无法正确识别上级目录的模块。

4. 排查依赖与环境一致性

移除前缀后的其他错误,大多是依赖缺失或环境不一致导致:

  • 确保requirements.txt包含所有必要依赖(和Heroku上的配置一致,比如scikit-learn、nltk、streamlit等)
  • 运行前执行pip install -r requirements.txt,保证所有库版本匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:28:12