KeyPress/docs/ENVIRONMENT_SETUP.md

538 lines
11 KiB
Markdown
Raw Permalink 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.

# 环境配置与依赖说明
本文档详细说明了 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` 输出)