140 lines
3.5 KiB
Python
140 lines
3.5 KiB
Python
|
|
#!/usr/bin/env python3
|
|||
|
|
"""
|
|||
|
|
简化版打包脚本
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
import os
|
|||
|
|
import sys
|
|||
|
|
|
|||
|
|
def check_dependencies():
|
|||
|
|
"""检查依赖"""
|
|||
|
|
print("检查依赖...")
|
|||
|
|
try:
|
|||
|
|
import streamlit
|
|||
|
|
import openai
|
|||
|
|
import dotenv
|
|||
|
|
print("✅ 依赖检查通过")
|
|||
|
|
return True
|
|||
|
|
except ImportError as e:
|
|||
|
|
print(f"❌ 依赖缺失: {e}")
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
def create_standalone_app():
|
|||
|
|
"""创建独立应用"""
|
|||
|
|
print("创建独立应用...")
|
|||
|
|
|
|||
|
|
# 创建启动脚本
|
|||
|
|
launcher_content = '''import os
|
|||
|
|
import sys
|
|||
|
|
import subprocess
|
|||
|
|
import tempfile
|
|||
|
|
import shutil
|
|||
|
|
|
|||
|
|
def install_dependencies():
|
|||
|
|
"""安装依赖"""
|
|||
|
|
print("正在安装依赖...")
|
|||
|
|
packages = ["streamlit", "openai", "python-dotenv"]
|
|||
|
|
for package in packages:
|
|||
|
|
try:
|
|||
|
|
subprocess.check_call([sys.executable, "-m", "pip", "install", package])
|
|||
|
|
print(f"✅ {package} 安装成功")
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f"❌ {package} 安装失败: {e}")
|
|||
|
|
return False
|
|||
|
|
return True
|
|||
|
|
|
|||
|
|
def run_app():
|
|||
|
|
"""运行应用"""
|
|||
|
|
# 创建临时目录并复制文件
|
|||
|
|
temp_dir = tempfile.mkdtemp()
|
|||
|
|
print(f"临时目录: {temp_dir}")
|
|||
|
|
|
|||
|
|
# 复制app.py
|
|||
|
|
shutil.copy2("app.py", os.path.join(temp_dir, "app.py"))
|
|||
|
|
|
|||
|
|
# 复制.env文件(如果存在)
|
|||
|
|
if os.path.exists(".env"):
|
|||
|
|
shutil.copy2(".env", os.path.join(temp_dir, ".env"))
|
|||
|
|
|
|||
|
|
# 切换到临时目录
|
|||
|
|
os.chdir(temp_dir)
|
|||
|
|
|
|||
|
|
# 运行streamlit
|
|||
|
|
print("启动应用...")
|
|||
|
|
print("请在浏览器中打开: http://localhost:8501")
|
|||
|
|
subprocess.call([sys.executable, "-m", "streamlit", "run", "app.py", "--server.headless", "true"])
|
|||
|
|
|
|||
|
|
# 清理临时目录
|
|||
|
|
shutil.rmtree(temp_dir)
|
|||
|
|
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
if install_dependencies():
|
|||
|
|
run_app()
|
|||
|
|
else:
|
|||
|
|
print("依赖安装失败,请手动安装依赖")
|
|||
|
|
input("按任意键退出...")
|
|||
|
|
'''
|
|||
|
|
|
|||
|
|
with open('launcher.py', 'w', encoding='utf-8') as f:
|
|||
|
|
f.write(launcher_content)
|
|||
|
|
|
|||
|
|
# 创建批处理文件
|
|||
|
|
bat_content = '''@echo off
|
|||
|
|
chcp 65001 >nul
|
|||
|
|
echo 多Agent决策工作坊启动器
|
|||
|
|
echo.
|
|||
|
|
echo 正在检查Python环境...
|
|||
|
|
|
|||
|
|
python --version >nul 2>&1
|
|||
|
|
if errorlevel 1 (
|
|||
|
|
echo 错误:未找到Python,请先安装Python 3.8+
|
|||
|
|
pause
|
|||
|
|
exit /b 1
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
echo Python环境正常
|
|||
|
|
echo 启动应用...
|
|||
|
|
echo.
|
|||
|
|
echo 应用将在浏览器中打开,请稍候...
|
|||
|
|
echo.
|
|||
|
|
|
|||
|
|
python launcher.py
|
|||
|
|
|
|||
|
|
pause
|
|||
|
|
'''
|
|||
|
|
|
|||
|
|
with open('启动应用.bat', 'w', encoding='gbk') as f:
|
|||
|
|
f.write(bat_content)
|
|||
|
|
|
|||
|
|
print("✅ 启动文件创建成功")
|
|||
|
|
|
|||
|
|
def main():
|
|||
|
|
"""主函数"""
|
|||
|
|
print("🚀 创建多Agent决策工作坊独立应用")
|
|||
|
|
print("=" * 50)
|
|||
|
|
|
|||
|
|
# 检查当前目录
|
|||
|
|
if not os.path.exists('app.py'):
|
|||
|
|
print("❌ 错误:请在项目根目录运行此脚本")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
# 检查依赖
|
|||
|
|
if not check_dependencies():
|
|||
|
|
print("请先安装依赖: pip install streamlit openai python-dotenv")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
# 创建独立应用
|
|||
|
|
create_standalone_app()
|
|||
|
|
|
|||
|
|
print("\n🎉 打包完成!")
|
|||
|
|
print("📁 生成的文件:")
|
|||
|
|
print(" - launcher.py (启动脚本)")
|
|||
|
|
print(" - 启动应用.bat (双击运行)")
|
|||
|
|
print("\n🚀 使用方法:")
|
|||
|
|
print(" 1. 双击 '启动应用.bat'")
|
|||
|
|
print(" 2. 等待依赖安装完成")
|
|||
|
|
print(" 3. 在浏览器中打开 http://localhost:8501")
|
|||
|
|
print("\n💡 提示:教室电脑需要有Python环境")
|
|||
|
|
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
main()
|