mxivideo/docs/EMBEDDED_PYTHON_GUIDE.md

225 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 嵌入式Python方案指南
## 🎯 方案概述
这个方案将Python环境直接打包到你的Tauri应用中用户无需安装Python即可使用所有功能。
## 🚀 快速开始
### 1. 设置嵌入式Python环境
```cmd
# 运行设置脚本
scripts\setup_embedded_python.bat
```
这将:
- 下载Python 3.11嵌入式版本
- 安装必要的依赖requests, Pillow等
- 复制你的python_core模块
- 创建启动脚本
- 更新Tauri配置
### 2. 测试嵌入式Python
```cmd
# 测试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. 启动应用测试
```cmd
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
```cmd
# 强制使用系统Python
set MIXVIDEO_FORCE_SYSTEM_PYTHON=1
cargo tauri dev
```
## 📦 构建和分发
### 开发模式
在开发模式下嵌入式Python位于 `src-tauri/python-embed/`
### 生产构建
```cmd
cargo tauri build
```
构建时Tauri会自动将 `python-embed` 目录打包到最终的可执行文件中。
### 分发
最终的应用包含:
- 你的Tauri应用
- 完整的Python环境
- 所有Python依赖
- 你的python_core模块
用户无需安装任何额外软件即可运行。
## 🧪 测试和调试
### 测试嵌入式Python
```cmd
# 直接测试
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路径**
```cmd
dir src-tauri\python-embed\python.exe
```
2. **检查模块导入**
```cmd
src-tauri\python-embed\python.exe -c "import sys; print(sys.path)"
```
3. **查看日志**
- 控制台会显示使用的Python类型
- 检查错误信息
## ⚙️ 自定义配置
### 添加更多依赖
编辑 `scripts/setup_embedded_python.py`
```python
dependencies = [
"requests",
"Pillow",
"numpy", # 添加新依赖
"opencv-python", # 添加新依赖
]
```
然后重新运行设置脚本。
### 更新Python版本
修改 `setup_embedded_python.py` 中的下载URL
```python
python_url = "https://www.python.org/ftp/python/3.12.0/python-3.12.0-embed-amd64.zip"
```
### 自定义Python路径
如果需要自定义路径,修改 `get_embedded_python_path()` 函数。
## 🎉 优势
### 对比其他方案
| 方案 | 优势 | 劣势 |
|------|------|------|
| **嵌入式Python** | ✅ 无需用户安装<br>✅ 版本一致<br>✅ 完全控制 | ❌ 包体积较大<br>❌ 更新需要重新分发 |
| Sidecar | ✅ 包体积小<br>✅ 独立更新 | ❌ 构建复杂<br>❌ 依赖管理困难 |
| 系统Python | ✅ 包体积最小 | ❌ 需要用户安装<br>❌ 版本不一致 |
### 适用场景
嵌入式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环境确保用户体验的一致性和简便性