225 lines
5.2 KiB
Markdown
225 lines
5.2 KiB
Markdown
# 嵌入式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环境,确保用户体验的一致性和简便性!
|