# Python嵌入式分发方案（备选）

## 方案概述

如果PyInstaller sidecar方案遇到问题，可以考虑直接将Python嵌入式版本打包到应用中。

## 实现步骤

### 1. 下载Python嵌入式版本

```bash
# Windows
wget https://www.python.org/ftp/python/3.11.0/python-3.11.0-embed-amd64.zip

# 解压到 src-tauri/python-embed/
```

### 2. 安装依赖到嵌入式Python

```python
# scripts/setup_embedded_python.py
import subprocess
import sys
from pathlib import Path

def setup_embedded_python():
    embed_dir = Path("src-tauri/python-embed")
    python_exe = embed_dir / "python.exe"
    
    # 安装pip
    subprocess.run([
        str(python_exe), "-m", "ensurepip", "--default-pip"
    ])
    
    # 安装依赖
    subprocess.run([
        str(python_exe), "-m", "pip", "install", 
        "requests", "Pillow", "opencv-python-headless"
    ])
    
    # 复制python_core模块
    import shutil
    shutil.copytree("python_core", embed_dir / "python_core")

if __name__ == "__main__":
    setup_embedded_python()
```

### 3. 修改Tauri配置

```json
{
  "bundle": {
    "resources": [
      "python-embed/**"
    ]
  }
}
```

### 4. 修改Rust执行器

```rust
fn get_embedded_python_path() -> Option<PathBuf> {
    let exe_dir = std::env::current_exe().ok()?
        .parent()?;
    
    let python_exe = if cfg!(target_os = "windows") {
        exe_dir.join("python-embed/python.exe")
    } else {
        exe_dir.join("python-embed/bin/python3")
    };
    
    if python_exe.exists() {
        Some(python_exe)
    } else {
        None
    }
}

async fn execute_with_embedded_python(
    module: &str,
    action: &str,
    params: Option<&str>,
) -> Result<String, String> {
    let python_exe = get_embedded_python_path()
        .ok_or("Embedded Python not found")?;
    
    let mut cmd = Command::new(python_exe);
    cmd.args(&[
        "-m", &format!("python_core.{}", module),
        "--action", action
    ]);
    
    if let Some(p) = params {
        cmd.args(&["--params", p]);
    }
    
    // 执行命令...
}
```

## 优缺点对比

### PyInstaller Sidecar方案
**优点**：
- 单文件分发
- 启动速度快
- 内存占用相对较小

**缺点**：
- 构建复杂
- 调试困难
- 可能遇到兼容性问题

### 嵌入式Python方案
**优点**：
- 构建简单
- 调试容易
- 兼容性好

**缺点**：
- 分发包较大
- 启动速度较慢
- 安全性较低

## 推荐方案

1. **首选**：PyInstaller Sidecar方案
2. **备选**：嵌入式Python方案
3. **开发**：系统Python方案

根据项目需求和技术栈选择最适合的方案。
