mxivideo/docs/EMBEDDED_PYTHON_GUIDE.md

5.2 KiB
Raw Blame History

嵌入式Python方案指南

🎯 方案概述

这个方案将Python环境直接打包到你的Tauri应用中用户无需安装Python即可使用所有功能。

🚀 快速开始

1. 设置嵌入式Python环境

# 运行设置脚本
scripts\setup_embedded_python.bat

这将:

  • 下载Python 3.11嵌入式版本
  • 安装必要的依赖requests, Pillow等
  • 复制你的python_core模块
  • 创建启动脚本
  • 更新Tauri配置

2. 测试嵌入式Python

# 测试Python版本
src-tauri\python-embed\python.exe --version

# 测试依赖
src-tauri\python-embed\python.exe -c "import requests, PIL; print('Dependencies OK')"

# 测试python_core模块
src-tauri\python-embed\python.exe -c "import python_core; print('python_core OK')"

3. 启动应用测试

cargo tauri dev

现在应用会自动使用嵌入式Python无需系统Python环境。

📁 目录结构

设置完成后,你的项目结构如下:

your-project/
├── src-tauri/
│   ├── python-embed/          # 嵌入式Python环境
│   │   ├── python.exe         # Python解释器
│   │   ├── python311.dll      # Python库
│   │   ├── Lib/               # 标准库
│   │   ├── Scripts/           # pip等工具
│   │   ├── python_core/       # 你的Python模块
│   │   └── python-core.bat    # 启动脚本
│   └── tauri.conf.json        # 已更新配置
├── python_core/               # 原始Python代码
└── scripts/
    ├── setup_embedded_python.py
    └── setup_embedded_python.bat

🔧 工作原理

执行优先级

Rust代码会按以下优先级选择Python环境

  1. 嵌入式Python - 如果 src-tauri/python-embed/python.exe 存在
  2. Sidecar - 如果 mixvideo-python-core.exe 存在
  3. 系统Python - 作为最后的回退选项

环境变量控制

你可以通过环境变量强制使用特定的Python

# 强制使用系统Python
set MIXVIDEO_FORCE_SYSTEM_PYTHON=1
cargo tauri dev

📦 构建和分发

开发模式

在开发模式下嵌入式Python位于 src-tauri/python-embed/

生产构建

cargo tauri build

构建时Tauri会自动将 python-embed 目录打包到最终的可执行文件中。

分发

最终的应用包含:

  • 你的Tauri应用
  • 完整的Python环境
  • 所有Python依赖
  • 你的python_core模块

用户无需安装任何额外软件即可运行。

🧪 测试和调试

测试嵌入式Python

# 直接测试
src-tauri\python-embed\python.exe -m python_core.main --module test --action hello

# 测试特定服务
src-tauri\python-embed\python.exe -m python_core.services.template_manager --action get_templates

在应用中测试

  1. 启动应用:cargo tauri dev
  2. 访问Python测试页面
  3. 运行测试 - 应该显示"Using embedded Python for execution"

调试问题

如果遇到问题:

  1. 检查Python路径

    dir src-tauri\python-embed\python.exe
    
  2. 检查模块导入

    src-tauri\python-embed\python.exe -c "import sys; print(sys.path)"
    
  3. 查看日志

    • 控制台会显示使用的Python类型
    • 检查错误信息

⚙️ 自定义配置

添加更多依赖

编辑 scripts/setup_embedded_python.py

dependencies = [
    "requests",
    "Pillow",
    "numpy",        # 添加新依赖
    "opencv-python", # 添加新依赖
]

然后重新运行设置脚本。

更新Python版本

修改 setup_embedded_python.py 中的下载URL

python_url = "https://www.python.org/ftp/python/3.12.0/python-3.12.0-embed-amd64.zip"

自定义Python路径

如果需要自定义路径,修改 get_embedded_python_path() 函数。

🎉 优势

对比其他方案

方案 优势 劣势
嵌入式Python 无需用户安装
版本一致
完全控制
包体积较大
更新需要重新分发
Sidecar 包体积小
独立更新
构建复杂
依赖管理困难
系统Python 包体积最小 需要用户安装
版本不一致

适用场景

嵌入式Python特别适合

  • 面向普通用户的应用
  • 需要特定Python版本的应用
  • 希望简化部署的企业应用
  • 不希望依赖外部环境的应用

🔄 维护和更新

更新Python代码

  1. 修改 python_core/ 中的代码
  2. 重新运行设置脚本:scripts\setup_embedded_python.bat
  3. 测试更改:cargo tauri dev

更新依赖

  1. 修改 setup_embedded_python.py 中的依赖列表
  2. 重新运行设置脚本
  3. 测试新依赖

版本管理

建议在版本控制中:

  • 包含 scripts/setup_embedded_python.py
  • 包含 python_core/ 源代码
  • 排除 src-tauri/python-embed/ (太大)
  • 在CI/CD中自动运行设置脚本

📋 最佳实践

  1. 定期更新Python版本 - 保持安全性
  2. 最小化依赖 - 减少包体积
  3. 测试多平台 - 确保跨平台兼容性
  4. 监控包大小 - 避免过度膨胀
  5. 文档化依赖 - 便于维护

这个方案为你提供了一个完全自包含的Python环境确保用户体验的一致性和简便性