增加mock 服务需要的 python 包下载安装方案

This commit is contained in:
Tian jianyong 2025-09-25 17:19:21 +08:00
parent d9e5a77a28
commit a9c2e7e32d
6 changed files with 260 additions and 5 deletions

5
.gitignore vendored
View File

@ -42,6 +42,8 @@ logs/
*.log
*.xml.versionsBackup
*.swp
*.tar
*.tar.gz
!*/build/*.java
!*/build/*.html
@ -51,4 +53,5 @@ logs/
.vscode/
Users/
qaup-deploy/
qaup-deploy/
deploy/offline_packages/

View File

@ -0,0 +1,255 @@
# Python依赖库离线部署指南
本文档提供了 QAUP-Management 项目中 tools 目录下 Python 脚本的离线部署指南。
## 📋 概述
通过对 tools 目录下 4 个 Python 文件的依赖分析,除了 Flask 之外,还需要安装以下外部库用于完整功能支持。
## 📂 分析的文件
- `tools/mock_airport.py` - 机场管理系统模拟服务
- `tools/mock_traffic_light.py` - 红绿灯设备模拟器
- `tools/mock_unmanned_vehicle.py` - 无人车厂商平台模拟服务
- `tools/aircraft_routes_from_api.py` - 航空器路由数据定义
## 📦 依赖库清单
### 🚀 必需的外部库
| 库名 | 用途 | 使用文件 | 关键功能 |
|-----|------|---------|----------|
| **Flask** | Web服务框架 | 所有mock_*.py文件 | API服务、HTTP路由 |
| **pyproj** | 坐标系转换 | mock_airport.py | CGCS2000↔WGS84精确转换 |
| **Shapely** | 几何操作 | mock_airport.py | 路径合并(linemerge)、几何计算 |
### 📚 内置库(无需安装)
以下库为 Python 标准库,无需额外安装:
```
time, math, logging, os, threading, atexit, socket, json,
argparse, datetime, signal, typing, collections.abc, copy
```
### 🔄 回退机制
- **pyproj**: 不可用时自动回退到简化坐标转换算法
- **Shapely**: 不可用时跳过路径合并,基本功能仍可用
## 🛠️ 离线部署步骤
### 步骤1在联网机器上下载依赖包
```bash
# 创建依赖包目录
mkdir offline_packages
cd offline_packages
# 下载所有依赖包(包含依赖的依赖)
pip download Flask pyproj Shapely
# 或者如果有requirements.txt
pip download -r ../requirements.txt
```
### 步骤2打包传输
```bash
# 打包下载的文件
tar -czf python_packages.tar.gz offline_packages/
# 传输到离线机器
scp python_packages.tar.gz user@offline-server:/path/to/destination/
```
### 步骤3在离线机器上安装
```bash
# 解压依赖包
tar -xzf python_packages.tar.gz
# 离线安装
pip install --find-links ./offline_packages --no-index Flask pyproj Shapely
# 或者如果有requirements.txt
pip install --find-links ./offline_packages --no-index -r requirements.txt
```
## ✅ 安装验证
### 验证脚本
创建 `test_dependencies.py` 文件:
```python
#!/usr/bin/env python3
"""
依赖库安装验证脚本
"""
import sys
def test_imports():
"""测试所有必需库的导入"""
success = True
# 测试基础库
try:
import flask
print("✅ Flask: OK")
except ImportError as e:
print(f"❌ Flask: FAILED - {e}")
success = False
# 测试坐标转换库
try:
import pyproj
print("✅ pyproj: OK")
except ImportError as e:
print(f"⚠️ pyproj: MISSING - 将使用简化坐标转换算法")
# 测试几何库
try:
import shapely
print("✅ Shapely: OK")
except ImportError as e:
print(f"⚠️ Shapely: MISSING - 路径合并功能将被跳过")
# 测试标准库
standard_libs = [
'time', 'math', 'logging', 'os', 'threading', 'atexit',
'socket', 'json', 'argparse', 'datetime', 'signal', 'typing'
]
for lib in standard_libs:
try:
__import__(lib)
except ImportError as e:
print(f"❌ {lib}: FAILED - {e}")
success = False
print("✅ 所有标准库: OK")
return success
def test_functionality():
"""测试关键功能"""
print("\n🧪 测试关键功能...")
# 测试坐标转换
try:
from pyproj import CRS, Transformer
wgs84_crs = CRS.from_epsg(4326)
print("✅ 坐标系转换功能: OK")
except ImportError:
print("⚠️ 坐标系转换功能: 使用简化算法")
except Exception as e:
print(f"❌ 坐标系转换功能: ERROR - {e}")
# 测试几何操作
try:
from shapely.geometry import LineString
from shapely.ops import linemerge
lines = [LineString([(0,0), (1,1)]), LineString([(1,1), (2,2)])]
merged = linemerge(lines)
print("✅ 几何操作功能: OK")
except ImportError:
print("⚠️ 几何操作功能: 路径合并将被跳过")
except Exception as e:
print(f"❌ 几何操作功能: ERROR - {e}")
if __name__ == "__main__":
print("🔍 验证Python依赖库安装...")
print("=" * 50)
if test_imports():
print("\n✅ 核心依赖库验证通过")
test_functionality()
print("\n🎉 系统准备就绪可以运行tools目录下的Python脚本")
sys.exit(0)
else:
print("\n❌ 依赖库验证失败,请检查安装")
sys.exit(1)
```
运行验证:
```bash
python test_dependencies.py
```
## 📄 requirements.txt
建议创建 `requirements.txt` 文件:
```txt
# QAUP-Management Tools Dependencies
Flask>=2.0.0
pyproj>=3.0.0
Shapely>=1.8.0
```
## 🔧 故障排除
### 常见问题
1. **pyproj 安装失败**
```bash
# 可能需要系统级依赖
# Ubuntu/Debian
sudo apt-get install libproj-dev proj-data proj-bin
# CentOS/RHEL
sudo yum install proj-devel
```
2. **Shapely 安装失败**
```bash
# 可能需要 GEOS 库
# Ubuntu/Debian
sudo apt-get install libgeos-dev
# CentOS/RHEL
sudo yum install geos-devel
```
3. **权限问题**
```bash
# 使用用户安装
pip install --user --find-links ./offline_packages --no-index Flask pyproj Shapely
```
### 验证服务启动
```bash
# 测试启动各个模拟服务
cd tools
# 机场管理服务 (端口8090)
python3 mock_airport.py
# 红绿灯模拟器 (端口8082)
python3 mock_traffic_light.py
# 无人车平台服务 (端口8091)
python3 mock_unmanned_vehicle.py
```
## 📝 注意事项
1. **Python版本**: 建议使用Python 3.7+
2. **网络隔离**: 确保 `--no-index` 参数防止联网下载
3. **依赖版本**: 固定版本号避免兼容性问题
4. **回退机制**: pyproj和Shapely不可用时会自动降级基本功能仍可用
5. **日志目录**: 确保运行目录有写权限创建logs目录
## 🆘 技术支持
如果遇到安装问题:
1. 检查Python版本: `python --version`
2. 检查pip版本: `pip --version`
3. 运行验证脚本: `python test_dependencies.py`
4. 查看错误日志: `logs/mock_server.log`
---
*文档生成时间: 2024年*
*适用于: QAUP-Management 项目 tools 目录*

View File

@ -1,4 +1,4 @@
# 通用无人车运行状态API上报必须字段 - 精简版)
# 通用无人车运行状态API测试版)
本说明仅包含机场部署必须按时上报的最小字段集合便于联调与验收。完整可选字段请参见《无人车通用运行状态API接口》。本文件已包含完整的请求方式与可运行示例使用本文件即可进行开发与测试。

View File

@ -3,7 +3,6 @@ import time
import math
import logging
import os
import uuid
import threading
import atexit
from typing import Any, Literal, final, TypedDict

View File

@ -13,7 +13,6 @@ import socket
import time
import json
import argparse
import sys
from datetime import datetime
import signal
from typing import TypedDict

View File

@ -13,7 +13,6 @@ import time
import math
import logging
import os
import uuid
from typing import Any, Literal, final, TypedDict
# 创建 logs 目录(如果不存在)