如何解决PyCharm中运行含本地包的Streamlit代码的两类报错?
解决方案:Streamlit运行与模块导入问题
一、修复ModuleNotFoundError: No module named 'demo'
用streamlit run命令启动时,Python解释器的搜索路径默认不包含项目根目录,导致找不到demo包。可以通过以下方法解决:
方法1:临时添加项目根目录到Python路径
在终端执行streamlit run前,先把项目根目录加入PYTHONPATH环境变量:- Linux/macOS:
export PYTHONPATH="/path/to/your/project:$PYTHONPATH" streamlit run gui/main.py - Windows:
set PYTHONPATH=C:\path\to\your\project;%PYTHONPATH% streamlit run gui/main.py
替换路径为你的实际项目根目录,注意
gui/main.py要和文件实际位置对应。- Linux/macOS:
方法2:在代码中手动添加路径
在gui/main.py最顶部加入以下代码,强制将项目根目录加入Python搜索路径:import sys from pathlib import Path # 定位项目根目录(gui目录的上一级即为根目录) project_root = Path(__file__).parent.parent sys.path.append(str(project_root))这样无论从哪个路径启动,都能正确找到
demo包。方法3:用PyCharm内置终端运行
PyCharm的终端会自动把项目根目录加入Python搜索路径,直接在PyCharm终端执行streamlit run gui/main.py即可,无需额外配置。
二、修复AttributeError: st.session_state has no attribute "messages"
这个错误是因为代码直接访问了st.session_state.messages,但该变量从未被初始化。Streamlit的session_state变量必须先定义才能使用,解决方式如下:
在第一次使用st.session_state.messages的代码前,添加初始化逻辑:
import streamlit as st # 初始化messages变量,不存在则创建 if "messages" not in st.session_state: st.session_state.messages = [] # 可根据业务需求初始化为字典等其他类型
点击PyCharm的Run按钮运行时,Streamlit的会话初始化流程和命令行启动有差异,因此必须显式初始化所有要用到的session_state变量,避免出现找不到属性的错误。
内容的提问来源于stack exchange,提问作者Adit Desai
相关产品推荐
相关产品推荐

