如何 run/debug 来自 IDE 的流式应用程序

How to run/debug a streamlit application from an IDE

我非常喜欢 streamlit 作为研究环境。混合 notebook/dashboard-like 输出我可以用纯代码快速设计它的定义(没有单元格等)以及通过小部件影响我的代码的能力,而它 运行s 是游戏规则的改变者。

为此,我一直在寻找一种方法来 运行 甚至调试 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 进入 Run/Debug 配置的解释器选项字段(这由 Streamlit 支持,因此保证将来不会被破坏1),code.py 按预期进入脚本路径字段。在过去的版本中,它也可以在 Run/Debug 配置的解释器选项字段中使用 -m streamlit.cli run,但此选项将来可能会失效。

不幸的是,这种调试方式似乎不起作用,因为 PyCharm 附加的参数被传递给 streamlit 而不是 pydev 调试器。

编辑:刚找到一种调试您自己的脚本的方法。您不是调试脚本,而是调试 运行 构成脚本的 streamlit.cli 模块。为此,您需要将最顶部字段中的 Script path: 更改为 Module name:(那里有一个稍微隐藏的下拉框...)。然后您可以将 streamlit.cli 插入该字段。作为参数,您现在将 run code.py 添加到 Run/Debug 配置的 Parameters: 字段中。

编辑:添加@sismo 的评论

如果您的脚本需要 运行 带有一些参数,您可以轻松地将它们添加为

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

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


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

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

from streamlit import bootstrap

real_script = 'main_script.py'

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

并在 PyCharm.

中将其设置为正常的 Python 运行 配置

如果您是 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 code 应用程序左侧的 运行 选项卡并告诉它哪个 Python 配置它应该用于调试应用程序:

Selecting Debug config for python interpreter

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

对@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 参数解析