如何 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
参数解析
我非常喜欢 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
参数解析