增加mock 服务需要的 python 包下载安装方案
This commit is contained in:
parent
d9e5a77a28
commit
a9c2e7e32d
5
.gitignore
vendored
5
.gitignore
vendored
@ -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/
|
||||
255
deploy/python-dependencies-offline.md
Normal file
255
deploy/python-dependencies-offline.md
Normal 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 目录*
|
||||
@ -1,4 +1,4 @@
|
||||
# 通用无人车运行状态API(上报必须字段 - 精简版)
|
||||
# 通用无人车运行状态API(测试版)
|
||||
|
||||
本说明仅包含机场部署必须按时上报的最小字段集合,便于联调与验收。完整可选字段请参见《无人车通用运行状态API接口》。本文件已包含完整的请求方式与可运行示例,使用本文件即可进行开发与测试。
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -13,7 +13,6 @@ import socket
|
||||
import time
|
||||
import json
|
||||
import argparse
|
||||
import sys
|
||||
from datetime import datetime
|
||||
import signal
|
||||
from typing import TypedDict
|
||||
|
||||
@ -13,7 +13,6 @@ import time
|
||||
import math
|
||||
import logging
|
||||
import os
|
||||
import uuid
|
||||
from typing import Any, Literal, final, TypedDict
|
||||
|
||||
# 创建 logs 目录(如果不存在)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user