# 双端依赖安装指南

> 本节描述如何让 `gvsds` 主服务器和 `ATestCServer` 等子服务器**共享同一版本**的 `gvsdsdk`。

## 1. 版本一致性原则

- **同一代码**：双端导入的是**同一份 Python 文件**（物理位置 `D:\SMANAGE\gvsdsdk`）
- **同一版本**：通过 `pyproject.toml` 中的 `version = "1.0.0"` 锁定
- **启动校验**：双端启动时调用 `gvsdsdk.check_min_version("1.0.0")`，版本不符会打 WARNING 日志
- **热重载支持**：直接编辑 `D:\SMANAGE\gvsdsdk` 下的文件即可生效（无需 reinstall）

## 2. 三种安装方式

### 方式 A：PYTHONPATH 方式（推荐开发用）

```bash
# 启动 gvsds
cd D:\SMANAGE\gvsds
set PYTHONPATH=D:\SMANAGE\gvsds;D:\SMANAGE\gvsdsdk
python manage.py runserver

# 启动 ATestCServer
cd D:\SMANAGE\ATestCServer
set PYTHONPATH=D:\SMANAGE\ATestCServer;D:\SMANAGE\gvsdsdk
python manage.py runserver 0.0.0.0:25080
```

`manage.py` 和 `settings.py` 内已自动 `sys.path.append(...)`，无需手动设置。

### 方式 B：可编辑 pip 安装（推荐开发用，自动同步）

```bash
# 全局安装一次即可，所有项目共享
pip install -e D:\SMANAGE\gvsdsdk

# 验证
pip show gvsdsdk
# Name: gvsdsdk
# Version: 1.0.0
# Location: D:\SMANAGE\gvsdsdk
```

### 方式 C：路径式 requirements 固定（推荐生产/部署）

`gvsds/requirements.txt`：
```
gvsdsdk==1.0.0
```

`ATestCServer/requirements.txt`：
```
gvsdsdk==1.0.0
```

部署时 `pip install -r requirements.txt` 会自动从 PyPI 拉取对应版本（或私有源）。

## 3. 启动时的版本校验日志

**正常启动**（两端版本一致）：

```
gvsds 端:
[INFO] gvsds.startup: [SDK] 加载: v1.0.0 @ D:\SMANAGE\gvsdsdk
[INFO] gvsds.startup: [SDK] OK: SDK 1.0.0 >= 1.0.0

ATestCServer 端:
[INFO] apps: [SDK] 加载: v1.0.0 @ D:\SMANAGE\gvsdsdk
[INFO] apps: [SDK] OK: SDK 1.0.0 >= 1.0.0
```

**版本不一致**（双端版本不同）：

```
[WARN] gvsds.startup: [SDK] 版本不符！FAIL: SDK 0.9.0 < 1.0.0 (required)。双端 gvsdsdk 版本必须一致！
```

## 4. CLI 验证工具

```bash
# 默认：显示简要信息
python -m gvsdsdk

# 仅版本号（适合脚本中调用）
python -m gvsdsdk --version
# 1.0.0

# 详细信息
python -m gvsdsdk --info
# GVS-DSDK Version Information:
#   Version      : 1.0.0
#   Major        : 1
#   Minor        : 0
#   Patch        : 0
#   Prerelease   :
#   Location     : D:\SMANAGE\gvsdsdk
#   Python       : 3.12.0
#   Platform     : Windows-10-...
#   Machine      : AMD64

# 最低版本检查（CI 友好）
python -m gvsdsdk --check 1.0.0
# OK: SDK 1.0.0 >= 1.0.0  (返回 0)

python -m gvsdsdk --check 2.0.0
# FAIL: SDK 1.0.0 < 2.0.0 (required)  (返回 1)

# 列出所有公开符号
python -m gvsdsdk --symbols

# 测试连通性
python -m gvsdsdk --ping
# Pong — SDK 1.0.0 ready at D:\SMANAGE\gvsdsdk
#   23 symbols available (lazy)
```

## 5. 升级 SDK 版本

当需要发布新版本时：

1. **修改 `D:\SMANAGE\gvsdsdk\__init__.py`**：
   ```python
   VERSION_MAJOR = 1
   VERSION_MINOR = 1  # 升级
   VERSION_PATCH = 0
   ```

2. **修改 `D:\SMANAGE\gvsdsdk\pyproject.toml`**：
   ```toml
   [project]
   version = "1.1.0"
   ```

3. **同步更新双端 `requirements.txt`**：
   ```
   gvsdsdk==1.1.0
   ```

4. **同步更新双端最低版本常量**：
   - `gvsds/settings.py:17` → `_REQUIRED_GVSDSDK = '1.1.0'`
   - `ATestCServer/apps/sub_server/apps.py:12` → `REQUIRED_GVSDSDK_VERSION = '1.1.0'`

5. **重启双端** → 启动日志会报告新版本

## 6. 常见问题

| 现象 | 原因 | 解决 |
|---|---|---|
| `ImportError: No module named 'gvsdsdk'` | PYTHONPATH 未设置 | 安装 SDK 或加入路径 |
| `WARNING [SDK] 版本不符` | 双端版本不一致 | 升级较低端 |
| `WARNING [SDK] gvsdsdk 未安装` | 子服务器 PYTHONPATH 漏配 | 检查 `manage.py:5` |
| 编辑 SDK 后无变化 | 字节码缓存 | 删除 `__pycache__/` |

## 7. 跨平台路径

`pyproject.toml` 路径引用应使用 `file:///` 协议：

```toml
gvsdsdk @ file:///D:/SMANAGE/gvsdsdk ; sys_platform == "win32"
gvsdsdk @ file:///opt/gvsdsdk          ; sys_platform == "linux"
gvsdsdk @ file:///usr/local/gvsdsdk    ; sys_platform == "darwin"
```

或在 CI 中使用环境变量：

```bash
pip install -e "$GVS_SDK_PATH"
```
