我真的很喜欢 streamlit 作为研究环境。混合使用类似笔记本/仪表板的输出,我可以使用纯代码来快速设计其定义(无单元等),以及在运行时通过小部件影响我的代码的能力,这改变了游戏规则。
为此,我正在寻找一种方法来运行甚至调试流式应用程序,因为教程仅显示它是通过命令行启动的:
streamlit run code.py
有没有办法从 IDE 运行或调试?
我真的很喜欢 streamlit 作为研究环境。混合使用类似笔记本/仪表板的输出,我可以使用纯代码来快速设计其定义(无单元等),以及在运行时通过小部件影响我的代码的能力,这改变了游戏规则。
为此,我正在寻找一种方法来运行甚至调试流式应用程序,因为教程仅显示它是通过命令行启动的:
streamlit run code.py
有没有办法从 IDE 运行或调试?
我找到了一种至少从 IDE 运行代码的方法(在我的例子中是 PyCharm)。该streamlit run code.py
命令可以直接从您的 IDE 中调用。(该streamlit run code.py
命令实际上调用python -m streamlit.cli run code.py
,这是以前从 IDE 运行的解决方案。)
进入-m streamlit run
运行/调试配置的解释器选项字段(Streamlit 支持,因此保证将来不会被破坏1),code.py 按预期进入脚本路径字段。在过去的版本中,它也可以-m streamlit.cli run
在运行/调试配置的解释器选项字段中使用,但这个选项将来可能会中断。
不幸的是,这种方式调试似乎不起作用,因为 PyCharm 附加的参数被传递给 streamlit 而不是 pydev 调试器。
编辑:刚刚找到了一种调试您自己的脚本的方法。您无需调试脚本,而是调试streamlit.cli
运行脚本的模块。为此,您需要在最顶部的字段中从 更改为Script path:
(Module name:
那里有一个稍微隐藏的下拉框......)。然后你可以插入streamlit.cli
到字段中。作为参数,您现在添加run code.py
到Parameters:
运行/调试配置的字段中。
编辑:添加@sismo 的评论
如果您的脚本需要使用一些参数运行,您可以轻松地将它们添加为
run main.py -- --option1 val1 --option2 val2
注意第一个--
空白:需要停止 streamlit 参数解析并传递给main.py
参数解析。
1 https://discuss.streamlit.io/t/run-streamlit-from-pycharm/21624/3
如果您是 VS Code 用户,则可以通过将以下配置添加到launch.json
文件来调试 Streamlit 应用程序:
{
"name": "Python:Streamlit",
"type": "python",
"request": "launch",
"module": "streamlit.cli",
"args": [
"run",
"${file}",
"--server.port",
"SPECIFY_YOUR_OWN_PORT_NUMBER_HERE" ]
}
指定端口号允许您在每次运行调试脚本时在固定端口号上启动应用程序。
一旦你更新了你的 launch.json 文件,你需要导航到 VS 代码应用程序左侧的运行选项卡,并告诉它应该使用哪个 Python 配置来调试应用程序:
感谢git-steb为我指出解决方案!
我想出了一个替代解决方案,它允许您以自然的方式使用 PyCharm 调试。只需设置一个运行脚本(我称之为run.py
如下所示:
from streamlit import bootstrap
real_script = 'main_script.py'
bootstrap.run(real_script, f'run.py {real_script}', [], {})
并将其设置为 PyCharm 中的普通 Python 运行配置。
对@aiwa 答案进行了一些修改 - 这在 VS 代码版本中对我有用 - 1.58
{
"configurations": [
{
"name": "Python:Streamlit",
"type": "python",
"request": "launch",
"module": "streamlit.cli",
"args": [
"run",
"${file}"
],
}
]
}
无法评论,所以我必须把它作为答案。
@Ben 的答案(模块调试部分)的补充:如果您的脚本需要与某些脚本一起运行,args
您可以轻松地将它们添加为
run main.py -- --option1 val1 --option2 val2
注意第一个--
空白:需要停止streamlit参数解析并传递给main.py
参数解析