KeyPress/docs/ENVIRONMENT_SETUP.md

538 lines
11 KiB
Markdown
Raw Normal View History

2025-10-22 17:26:03 +08:00
# 环境配置与依赖说明
本文档详细说明了 KeyPressRemark 项目的环境配置要求、依赖管理和常见问题解决方案。
## 📋 目录
- [系统要求](#系统要求)
- [Python 环境](#python-环境)
- [依赖包详解](#依赖包详解)
- [环境配置步骤](#环境配置步骤)
- [常见问题解决](#常见问题解决)
- [依赖管理最佳实践](#依赖管理最佳实践)
## 🖥️ 系统要求
### 操作系统支持
| 操作系统 | 版本要求 | 支持状态 | 说明 |
|---------|---------|---------|------|
| Windows 10 | 1909+ | ✅ 完全支持 | 推荐版本 |
| Windows 11 | 所有版本 | ✅ 完全支持 | 推荐版本 |
| Windows 8.1 | 所有版本 | ⚠️ 基本支持 | 部分功能可能受限 |
| Windows 7 | SP1+ | ❌ 不支持 | PyQt5 不再支持 |
| Linux | 任何发行版 | ❌ 不支持 | Windows API 依赖 |
| macOS | 任何版本 | ❌ 不支持 | Windows API 依赖 |
### 硬件要求
| 组件 | 最低要求 | 推荐配置 |
|------|---------|---------|
| CPU | 1GHz 单核 | 2GHz 双核+ |
| 内存 | 512MB | 2GB+ |
| 硬盘 | 100MB 可用空间 | 500MB+ |
| 显示器 | 800x600 | 1920x1080+ |
### 权限要求
- **管理员权限**: 必需(用于按键模拟功能)
- **UAC 设置**: 建议设置为最低级别,减少弹窗干扰
- **防火墙**: 无特殊要求
- **杀毒软件**: 可能需要将程序添加到白名单
## 🐍 Python 环境
### Python 版本要求
```yaml
最低版本: Python 3.11.0
推荐版本: Python 3.11.7+
测试版本:
- Python 3.11.7 ✅
- Python 3.12.x ✅
- Python 3.10.x ⚠️ (可能存在兼容性问题)
```
### Python 安装建议
1. **官方安装器** (推荐)
```bash
# 下载 Python 3.11.7 from python.org
# 安装时勾选 "Add Python to PATH"
# 安装时勾选 "Install for all users"
```
2. **通过 Microsoft Store** (简单)
```bash
# 搜索 "Python 3.11" 并安装
# 自动配置环境变量
```
3. **通过 pyenv-win** (高级用户)
```bash
# 安装 pyenv-win
git clone https://github.com/pyenv-win/pyenv-win.git %USERPROFILE%\.pyenv
# 安装指定版本
pyenv install 3.11.7
pyenv global 3.11.7
```
### 验证 Python 安装
```bash
# 检查 Python 版本
python --version
# 输出: Python 3.11.7
# 检查 pip 版本
pip --version
# 输出: pip 23.3.1 from ...
# 检查环境变量
echo %PATH%
# 应该包含 Python 安装路径
```
## 📦 依赖包详解
### 核心依赖
#### PyQt5 (5.15.11)
```yaml
用途: 图形用户界面框架
重要性: 核心依赖
安装大小: ~50MB
许可证: GPL v3 / Commercial
```
**功能说明**:
- 提供完整的 GUI 组件库
- 支持信号槽机制
- 跨平台支持(本项目仅用于 Windows
- 事件循环和定时器功能
**安装命令**:
```bash
# 标准安装
pip install PyQt5==5.15.11
# 使用 uv (推荐)
uv pip install PyQt5==5.15.11
```
#### pyqt5-qt5 (5.15.2)
```yaml
用途: Qt5 运行时库
重要性: 核心依赖
安装大小: ~100MB
许可证: LGPL v3
```
**重要说明**:
⚠️ **版本锁定原因**:
- Windows 平台必须使用 `5.15.2` 版本
- 更新的 `5.15.17` 版本不提供 Windows wheel 文件
- 这是 PyQt5 在 Windows 平台的已知限制
**安装命令**:
```bash
# 必须指定确切版本
pip install pyqt5-qt5==5.15.2
# 使用 uv
uv pip install pyqt5-qt5==5.15.2
```
#### pywin32 (311)
```yaml
用途: Windows API 访问库
重要性: 核心依赖
安装大小: ~10MB
许可证: PSF License
```
**功能说明**:
- 提供 Python 访问 Windows API 的能力
- 包含 win32gui, win32api, win32con 等模块
- 支持窗口操作、消息发送、系统信息获取
- 版本号与 Windows 构建号相关
**安装命令**:
```bash
pip install pywin32==311
```
### 开发依赖
#### PyInstaller (6.16.0+)
```yaml
用途: Python 程序打包工具
重要性: 打包依赖
安装大小: ~15MB
许可证: GPL v2
```
**功能说明**:
- 将 Python 程序打包为独立的可执行文件
- 支持单文件和目录两种打包方式
- 自动处理依赖关系
- 支持自定义图标和版本信息
**安装命令**:
```bash
# 开发环境安装
uv add --dev pyinstaller>=6.0.0
```
### 依赖关系图
```mermaid
graph TD
A[KeyPressRemark] --> B[PyQt5]
A --> C[pywin32]
B --> D[pyqt5-qt5]
B --> E[pyqt5-sip]
A --> F[PyInstaller]
F --> G[altgraph]
F --> H[pefile]
F --> I[pyinstaller-hooks-contrib]
style A fill:#e1f5fe
style B fill:#f3e5f5
style C fill:#f3e5f5
style D fill:#fff3e0
style F fill:#e8f5e8
```
## 🔧 环境配置步骤
### 方案一:使用 uv (推荐)
uv 是新一代 Python 包管理器,速度比 pip 快 10-100 倍。
```bash
# 1. 安装 uv
pip install uv
# 2. 克隆项目
git clone <repository-url>
cd KeyPressRemark
# 3. 创建虚拟环境
uv venv --python 3.11
# 4. 激活虚拟环境
.venv\Scripts\activate
# 5. 安装依赖
uv pip install PyQt5==5.15.11 pyqt5-qt5==5.15.2 pywin32==311
# 6. 安装开发依赖(可选)
uv add --dev pyinstaller pytest pytest-qt black isort flake8
# 7. 验证安装
python -c "import PyQt5; print('PyQt5 安装成功')"
python -c "import win32gui; print('pywin32 安装成功')"
```
### 方案二:使用传统 pip
```bash
# 1. 克隆项目
git clone <repository-url>
cd KeyPressRemark
# 2. 创建虚拟环境
python -m venv .venv
# 3. 激活虚拟环境
.venv\Scripts\activate
# 4. 升级 pip
python -m pip install --upgrade pip
# 5. 安装依赖
pip install -r requirements.txt
# 6. 验证安装
python src/main.py
```
### 方案三:使用 conda/mamba
```bash
# 1. 创建 conda 环境
conda create -n keypressremark python=3.11
# 2. 激活环境
conda activate keypressremark
# 3. 安装依赖
# 注意PyQt5 通过 conda-forge 安装可能版本不匹配
pip install PyQt5==5.15.11 pyqt5-qt5==5.15.2 pywin32==311
# 4. 验证安装
python src/main.py
```
### Docker 环境 (实验性)
```dockerfile
# Dockerfile (仅用于开发不能运行GUI)
FROM python:3.11-windowsservercore
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY src/ ./src/
CMD ["python", "src/main.py"]
```
注意:由于 Windows API 依赖Docker 环境主要用于代码检查,无法运行完整功能。
## 🔍 常见问题解决
### 问题 1: PyQt5 安装失败
**错误信息**:
```
ERROR: Could not find a version that satisfies the requirement PyQt5
```
**解决方案**:
```bash
# 方案 A: 使用官方索引
pip install -i https://pypi.org/simple/ PyQt5==5.15.11
# 方案 B: 手动下载 wheel 文件
# 从 https://pypi.org/project/PyQt5/#files 下载对应版本
pip install PyQt5-5.15.11-cp311-cp311-win_amd64.whl
# 方案 C: 清理缓存重试
pip cache purge
pip install PyQt5==5.15.11
```
### 问题 2: pyqt5-qt5 版本冲突
**错误信息**:
```
Distribution pyqt5-qt5==5.15.17 can't be installed because it doesn't have a wheel for the current platform
```
**解决方案**:
```bash
# 强制安装兼容版本
uv pip install pyqt5-qt5==5.15.2 --force-reinstall
# 或者手动指定约束
echo "pyqt5-qt5==5.15.2" > constraints.txt
pip install PyQt5==5.15.11 -c constraints.txt
```
### 问题 3: pywin32 权限问题
**错误信息**:
```
Access is denied
```
**解决方案**:
```bash
# 方案 A: 管理员权限安装
# 以管理员身份运行命令提示符
pip install pywin32==311
# 方案 B: 用户级安装
pip install --user pywin32==311
# 方案 C: 安装后手动注册
python Scripts/pywin32_postinstall.py -install
```
### 问题 4: 虚拟环境激活失败
**错误信息**:
```
cannot be loaded because running scripts is disabled on this system
```
**解决方案**:
```powershell
# 在 PowerShell 中执行(管理员权限)
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
# 然后重新激活虚拟环境
.venv\Scripts\activate
```
### 问题 5: 中文路径问题
**错误信息**:
```
UnicodeDecodeError: 'gbk' codec can't decode byte
```
**解决方案**:
```bash
# 方案 A: 设置环境变量
set PYTHONIOENCODING=utf-8
# 方案 B: 避免中文路径
# 将项目移动到英文路径下
# 方案 C: 修改系统区域设置
# 控制面板 -> 区域 -> 管理 -> 更改系统区域设置 -> Beta: 使用 Unicode UTF-8
```
### 问题 6: 防火墙/杀毒软件拦截
**现象**:
- 程序无法启动
- 按键发送功能异常
- 弹出安全警告
**解决方案**:
```bash
# 1. 添加到防火墙例外
# Windows Defender 防火墙 -> 允许应用通过防火墙
# 2. 添加到杀毒软件白名单
# 各杀毒软件设置方法不同,需要将以下路径添加到白名单:
# - Python.exe 路径
# - 项目文件夹路径
# - 生成的 exe 文件路径
# 3. 临时关闭实时保护(仅测试用)
# Windows 安全中心 -> 病毒和威胁防护 -> 实时保护
```
## 📚 依赖管理最佳实践
### 版本锁定策略
1. **精确版本锁定** (推荐用于生产)
```
PyQt5==5.15.11
pyqt5-qt5==5.15.2
pywin32==311
```
2. **兼容版本范围** (用于开发)
```
PyQt5>=5.15.10,<5.16.0
pyqt5-qt5>=5.15.2,<5.16.0
pywin32>=311
```
3. **主版本锁定** (用于扩展性)
```
PyQt5~=5.15.11 # 等同于 >=5.15.11, <5.16.0
```
### requirements.txt 管理
创建多个需求文件:
```bash
# requirements/base.txt - 基础依赖
PyQt5==5.15.11
pyqt5-qt5==5.15.2
pywin32==311
# requirements/dev.txt - 开发依赖
-r base.txt
pytest>=7.0.0
pytest-qt>=4.0.0
black>=22.0.0
isort>=5.0.0
flake8>=4.0.0
# requirements/build.txt - 打包依赖
-r base.txt
pyinstaller>=6.0.0
```
### 依赖安全检查
```bash
# 使用 pip-audit 检查安全漏洞
pip install pip-audit
pip-audit
# 使用 safety 检查
pip install safety
safety check
# 检查依赖许可证
pip install pip-licenses
pip-licenses
```
### 依赖更新策略
```bash
# 1. 检查过时的包
pip list --outdated
# 2. 生成当前环境的精确依赖
pip freeze > requirements-lock.txt
# 3. 测试更新(在独立环境中)
python -m venv test-env
test-env\Scripts\activate
pip install -r requirements.txt
python src/main.py # 测试功能
# 4. 逐步更新(推荐)
# 一次只更新一个包,测试后再更新下一个
```
### 环境隔离最佳实践
1. **项目级隔离**
```bash
# 每个项目使用独立的虚拟环境
python -m venv .venv-keypressremark
```
2. **功能级隔离**
```bash
# 开发环境
python -m venv .venv-dev
# 测试环境
python -m venv .venv-test
# 打包环境
python -m venv .venv-build
```
3. **版本级隔离**
```bash
# Python 3.11 环境
python3.11 -m venv .venv-py311
# Python 3.12 测试环境
python3.12 -m venv .venv-py312
```
---
## 🆘 获取支持
如果遇到环境配置问题,可以通过以下方式获取帮助:
1. **查看 Issues**: [GitHub Issues](https://github.com/your-repo/issues)
2. **提交问题**: 使用问题模板提供详细信息
3. **社区讨论**: [GitHub Discussions](https://github.com/your-repo/discussions)
提交问题时,请包含以下信息:
- 操作系统版本
- Python 版本
- 完整的错误信息
- 尝试的解决方案
- 环境信息 (`pip list` 输出)