Invoking a Python subprocess in a deployed Streamlit app
Problem
假设你想调用一个子进程来运行一个Python脚本script.py在你部署的Streamlit应用streamlit_app.py中。例如,机器学习库Ludwig是通过命令行界面运行的,或者你可能想从Python中运行一个bash脚本或类似类型的进程。
您已经尝试了以下方法,但在运行script.py时遇到了依赖问题,尽管您已经在requirements文件中指定了Python依赖项:
# streamlit_app.py
import streamlit as st
import subprocess
subprocess.run(["python", "script.py"])
Solution
当你运行上述代码块时,你将获得系统路径上的Python版本——不一定是Streamlit代码运行的虚拟环境中安装的Python可执行文件。
解决方案是直接使用sys.executable检测Python可执行文件:
# streamlit_app.py
import streamlit as st
import subprocess
import sys
subprocess.run([f"{sys.executable}", "script.py"])
这确保了script.py在与您的Streamlit代码相同的Python可执行文件下运行——即安装了您的Python依赖项的地方。
Relevant links
- https://stackoverflow.com/questions/69947867/run-portion-of-python-code-in-parallel-from-a-streamlit-app/69948545#69948545
- https://discuss.streamlit.io/t/modulenotfounderror-no-module-named-cv2-streamlit/18319/3?u=snehankekre
- https://docs.python.org/3/library/sys.html#sys.executable
还有问题吗?
我们的 论坛 充满了有用的信息和Streamlit专家。