如何从 IDE 运行/调试流式应用程序

Posted

技术标签:

【中文标题】如何从 IDE 运行/调试流式应用程序【英文标题】:How to run/debug a streamlit application from an IDE 【发布时间】:2020-05-27 01:30:46 【问题描述】:

我真的很喜欢 streamlit 作为研究环境。将类似笔记本/仪表板的输出混合在一起,我可以使用纯代码来快速设计其定义(无单元等),并且能够在运行时通过小部件影响我的代码,这改变了游戏规则。

为此,我一直在寻找一种方法来运行甚至调试流式应用程序,因为教程只显示它是通过命令行启动的:

streamlit run code.py

有没有办法从 IDE 运行或调试?

【问题讨论】:

【参考方案1】:

我找到了一种至少从 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参数解析。


1https://discuss.streamlit.io/t/run-streamlit-from-pycharm/21624/3

【讨论】:

谢谢,这非常有用且有效!只是提醒其他人不要忘记设置正确的工作目录,因为我没有第一次这样做,它显然无法工作。 谢谢你。非常有用的信息。 嘿,我只想说你摇滚。谢谢你把这个放在这里 一个建议。我们可以将脚本所在的目录放在“工作目录”字段中,然后我们不需要在模块的“参数”字段中提供脚本的完整路径。这实际上帮助我在同一目录中调试了一个带有依赖 python 脚本的流线型项目。 在来自@jasoos 的工作目录提示的顶部,使用宏作为模块参数中的文件名意味着您可以对同一工作目录中的所有流光 python 文件使用相同的配置。例如。参数:run $FileName$【参考方案2】:

如果您是 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 配置来调试应用:

Selecting Debug config for python interpreter

感谢git-steb 为我指出解决方案!

【讨论】:

看起来您可能还需要切换到“module”:“streamlit”,因为他们提到现在正式支持这一点。但是在进行编辑之前应该有人先测试一下。【参考方案3】:

我想出了一个替代解决方案,它允许您以自然的方式使用 PyCharm 调试。只需设置一个运行脚本(我称之为run.py,如下所示:

from streamlit import bootstrap

real_script = 'main_script.py'

bootstrap.run(real_script, f'run.py real_script', [], )

并在 PyCharm 中将其设置为正常的 Python 运行配置。

【讨论】:

以下行对我有用 bootstrap.run(real_script, f'run.py real_script', [] , ) 太棒了!老实说,我认为这是最简单的解决方案。还要感谢@RudigerWolf 的修复,您应该考虑编辑原始答案。 请注意,is not officially supported 和某些 Streamlit 功能可能无法按预期工作。【参考方案4】:

对@aiwa 答案进行了一些修改 - 这在 VS 代码版本中对我有用 - 1.58


"configurations": [
    
        "name": "Python:Streamlit",
        "type": "python",
        "request": "launch",
        "module": "streamlit.cli",
        "args": [
            "run",
            "$file"
        ],
    
 ]

【讨论】:

【参考方案5】:

无法发表评论,所以我必须将其作为答案。

@Ben 的答案(模块调试部分)的补充: 如果您的脚本需要使用args 运行,您可以轻松地将它们添加为

run main.py -- --option1 val1 --option2 val2

注意第一个--带空白:需要停止streamlit参数解析并传递给main.py参数解析

【讨论】:

我用你的补充更新了我的原始答案,谢谢!

以上是关于如何从 IDE 运行/调试流式应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何从 IDE 在移动 chrome 上运行 Flutter Web

如何在 Eclipse IDE(同一台机器)中远程调试在 Web 逻辑服务器上运行的企业应用程序

利用 PhpStormIdea 等 IDE 如何 运行/调试 Go 程序 ?

如何在 SSH 下远程使用 IDE 编译和调试

即使在调试之后,Kivymd 应用程序也会在启动时崩溃

如何使用Cocos Code IDE调试Lua开发的游戏