将Streamlit应用打包成可执行文件
1.要将Streamlit应用打包成可执行文件(exe),可以使用PyInstaller工具。以下是具体步骤:
安装必要的库
首先,确保安装了Streamlit和PyInstaller:
pip install streamlit pyinstaller
创建Streamlit应用
编写一个简单的Streamlit应用,例如app.py:
import streamlit as st
st.title("我的超棒应用")
x = st.slider("x")
st.write(x, "的平方是", x * x)
创建打包脚本
在项目根目录下创建一个名为run_app.py的文件,内容如下:
import streamlit.web.cli as stcli
import os
import sys
if __name__ == "__main__":
# PyInstaller onefile 模式下的解压临时目录
base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__)))
# 切换工作目录到真正的程序根目录
os.chdir(os.path.dirname(os.path.abspath(__file__)))
# 这里的 streamlit app 是什么名字,需要修改下,我的这里叫main.py
app_path = os.path.join(base_path, "myapp.py")
# 确保工作目录正确
if not os.path.exists(app_path):
print("找不到 myapp.py:", app_path)
sys.exit(1)
sys.argv = [
"streamlit",
"run",
app_path,
"--global.developmentMode=false",
]
sys.exit(stcli.main())
创建hooks文件夹和hook-streamlit.py文件
在项目根目录下创建一个名为hooks的文件夹,并在其中创建一个名为hook-streamlit.py的文件,内容如下:
from PyInstaller.utils.hooks import copy_metadata
datas = copy_metadata("streamlit")
第一次打包
运行以下命令进行第一次打包:
pyinstaller --onefile --additional-hooks-dir=./hooks run_app.py --clean
修改spec文件并进行第二次打包
打开生成的run_app.spec文件,添加以下内容:
from PyInstaller.utils.hooks import collect_data_files
from PyInstaller.utils.hooks import copy_metadata
from PyInstaller.utils.hooks import collect_submodules
datas = [(r"D:\auto_test\.venv\Lib\site-packages\streamlit\runtime","./streamlit/runtime")]
datas += collect_data_files("streamlit")
datas += copy_metadata("streamlit")
# 把你的项目打包进去
datas += [('./myapp.py', '.')]
a.datas = datas或者
datas=datas,
noarchive=False,
然后运行以下命令进行第二次打包:
pyinstaller run_app.spec --clean
这样就会在dist文件夹下生成一个可执行文件run_app.exe
通过以上步骤,你可以将Streamlit应用成功打包成exe文件,并在其他电脑上运行。
参考网站
https://juejin.cn/post/7537711310579318784
https://blog.csdn.net/weixin_46277779/article/details/144629460
Streamlit 打包后无法运行的解决方法
1
2
3
当使用 PyInstaller 将 Streamlit 应用打包为可执行文件后,可能会遇到无法运行的问题。这通常是由于依赖未正确打包或路径配置错误导致的。以下是解决此问题的步骤。
示例问题
运行 exe 文件时提示错误:找不到 main.py 或依赖模块。
复制
解决步骤
- 创建运行入口文件
Streamlit 应用需要通过命令 streamlit run 启动,因此需要创建一个入口文件(如 run_app.py),以便正确调用 Streamlit。
示例代码:
import streamlit.web.cli as stcli
import sys
import os
if __name__ == "__main__":
base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__)))
os.chdir(os.path.dirname(os.path.abspath(__file__)))
app_path = os.path.join(base_path, "main.py")
if not os.path.exists(app_path):
print("找不到 main.py:", app_path)
sys.exit(1)
sys.argv = ["streamlit", "run", app_path, "--global.developmentMode=false"]
sys.exit(stcli.main())
复制
2. 创建 Hook 文件
在项目根目录下创建 hooks 文件夹,并添加 hook-streamlit.py 文件,用于确保 Streamlit 的依赖被正确打包。
示例代码:
from PyInstaller.utils.hooks import copy_metadata
datas = copy_metadata('streamlit')
复制
3. 使用 PyInstaller 打包
首次运行以下命令生成 .spec 文件:
pyinstaller --onefile --additional-hooks-dir=./hooks run_app.py --clean
复制
然后修改生成的 .spec 文件,确保依赖和路径正确。
关键修改:
from PyInstaller.utils.hooks import collect_data_files, copy_metadata
datas = collect_data_files("streamlit")
datas += copy_metadata("streamlit")
datas += [('./main.py', '.'), ('./config.py', '.'), ('./pages', 'pages')]
a = Analysis(
['run_app.py'],
pathex=[],
binaries=[],
datas=datas,
hiddenimports=[],
hookspath=['./hooks'],
)
复制
完成修改后,重新运行以下命令进行打包:
pyinstaller run_app.spec --clean
复制
4. 检查依赖和路径
将 main.py 和其他必要文件(如 .streamlit/config.toml)复制到生成的 dist 文件夹中,确保所有依赖文件都在正确的位置。
- 测试运行
双击生成的 .exe 文件,确认应用能够正常启动。如果仍有问题,请检查日志并确保所有依赖已正确安装和打包。
通过以上步骤,可以有效解决 Streamlit 打包后无法运行的问题

浙公网安备 33010602011771号