将含Streamlit的Python脚本转换为.exe文件失败求助
Streamlit脚本转.exe文件解决方案
问题原因
直接打包原Streamlit脚本时,PyInstaller无法正确触发Streamlit的Web服务启动逻辑,导致程序执行后直接退出,出现窗口闪一下就消失的情况。
解决步骤
1. 编写启动脚本
创建一个名为run_app.py的新脚本,用来调用Streamlit命令启动你的应用,代码如下:
import subprocess import sys import os # 获取当前程序所在目录 if getattr(sys, 'frozen', False): app_dir = os.path.dirname(sys.executable) else: app_dir = os.path.dirname(os.path.abspath(__file__)) # 指定你的Streamlit主脚本文件名(替换成你自己的脚本名,比如main.py) main_script = os.path.join(app_dir, 'main.py') # 启动Streamlit服务并打开浏览器 subprocess.run([ sys.executable, '-m', 'streamlit', 'run', main_script, '--server.headless=false', '--browser.gatherUsageStats=false' ])
2. 用auto-py-to-exe打包启动脚本
- 打开auto-py-to-exe,选择
run_app.py作为目标脚本 - 选择打包模式(推荐One File或Directory均可)
- 切换到Additional Files选项卡,点击
Add Files,选择你的原Streamlit脚本(比如main.py),设置Destination为.(表示和exe同目录) - 点击
Convert .py to .exe完成打包
3. 运行测试
打包完成后,将生成的.exe文件和原Streamlit脚本放在同一目录下,双击exe即可自动打开浏览器加载你的Streamlit应用。
额外注意事项
- 如果使用One File模式,确保打包时已将原Streamlit脚本添加到额外文件中,否则exe找不到脚本会报错
- 若打包后出现依赖缺失,可在auto-py-to-exe的Hidden Imports中手动添加缺失的模块(比如
streamlit相关的子模块)
内容的提问来源于stack exchange,提问作者ilyas3141
相关产品推荐
相关产品推荐

