提交
This commit is contained in:
1 parent
48f15745be
commit
e421030ada
72 files changed
+17064
-35
No files matched your search
@@ -0,0 +1,169 @@
|
||||
# Python版本兼容性说明
|
||||
|
||||
## 问题分析
|
||||
|
||||
原始脚本使用了Python 3.7+的语法特性,在Python 3.6环境运行报错:
|
||||
|
||||
```
|
||||
SyntaxError: invalid syntax
|
||||
```
|
||||
|
||||
### 具体问题
|
||||
1. **`from __future__ import annotations`** - Python 3.7+特性
|
||||
2. **类型注解语法** `-> None` - 在`__future__`导入后变为强制语法
|
||||
|
||||
## 解决方案
|
||||
|
||||
### 文件版本说明
|
||||
|
||||
| 文件名 | Python版本 | 特性支持 | 适用环境 |
|
||||
|--------|-----------|----------|----------|
|
||||
| `02_parse_score_data_fixed.py` | 3.7+ | 类型注解 + f-string | 开发环境 |
|
||||
| `02_parse_score_data_py36.py` | 3.6+ | 移除类型注解 | 兼容版本 |
|
||||
| `02_parse_score_data_py36_compatible.py` | 3.6+ | 移除类型注解 + .format()格式 | 中等兼容环境 |
|
||||
| `02_parse_score_data_py34_compatible.py` | 3.4+ | 无typing模块 + .format()格式 | **超老环境推荐** |
|
||||
|
||||
### 常见错误及解决方案
|
||||
|
||||
#### 错误:`ImportError: No module named typing`
|
||||
**原因**: Python版本过低(< 3.5)或未安装typing模块
|
||||
**解决**: 使用 `02_parse_score_data_py34_compatible.py`
|
||||
|
||||
#### 错误:`SyntaxError: invalid syntax` (f-string)
|
||||
**原因**: Python版本不支持f-string(< 3.6)
|
||||
**解决**: 使用带`.format()`的兼容版本
|
||||
|
||||
#### 错误:`SyntaxError: invalid syntax` (类型注解)
|
||||
**原因**: Python版本不支持类型注解语法
|
||||
**解决**: 使用移除类型注解的版本
|
||||
|
||||
### 生产环境使用
|
||||
|
||||
#### 方法1:智能启动脚本(强烈推荐)
|
||||
```bash
|
||||
# 自动检测Python版本和可用模块,自动选择最合适的脚本版本
|
||||
./run_parser.sh
|
||||
|
||||
# 查看运行日志
|
||||
tail -f 2.log
|
||||
```
|
||||
|
||||
#### 方法2:手动选择版本
|
||||
```bash
|
||||
# 对于超老环境(Python < 3.6 或无typing模块)
|
||||
nohup python3 02_parse_score_data_py34_compatible.py > 2.log 2>&1 &
|
||||
|
||||
# 对于Python 3.6环境
|
||||
nohup python3 02_parse_score_data_py36_compatible.py > 2.log 2>&1 &
|
||||
```
|
||||
|
||||
#### 方法2:直接运行
|
||||
```bash
|
||||
# Python 3.6环境使用完全兼容版本
|
||||
nohup python3 02_parse_score_data_py36_compatible.py > 2.log 2>&1 &
|
||||
|
||||
# 查看运行日志
|
||||
tail -100f 2.log
|
||||
```
|
||||
|
||||
#### 进程管理
|
||||
```bash
|
||||
# 查看进程状态
|
||||
ps aux | grep python
|
||||
|
||||
# 停止进程
|
||||
kill $(cat parser.pid)
|
||||
|
||||
# 查看日志统计
|
||||
grep "解析成功" 2.log | wc -l # 成功记录数
|
||||
grep "解析失败" 2.log | wc -l # 失败记录数
|
||||
```
|
||||
|
||||
### 版本对比
|
||||
|
||||
#### 02_parse_score_data_py36_compatible.py (推荐用于生产环境)
|
||||
- ✅ 完全兼容Python 3.6
|
||||
- ✅ 使用 `.format()` 替代 f-string
|
||||
- ✅ 移除所有类型注解
|
||||
- ✅ 避免复杂的字符串嵌套表达式
|
||||
- ✅ 稳定的生产环境运行
|
||||
|
||||
### 代码修改内容
|
||||
|
||||
#### 移除的特性
|
||||
```python
|
||||
# 移除此行
|
||||
from __future__ import annotations
|
||||
|
||||
# 函数定义从:
|
||||
def connect_db(self) -> None:
|
||||
# 改为:
|
||||
def connect_db(self):
|
||||
```
|
||||
|
||||
#### 保持兼容的特性
|
||||
- f-string (Python 3.6+)
|
||||
- `pathlib` (Python 3.6+)
|
||||
- `dataclasses` (Python 3.7+但未使用)
|
||||
|
||||
## 版本检测脚本
|
||||
|
||||
```bash
|
||||
# 检查Python版本
|
||||
python3 --version
|
||||
|
||||
# 检查语法兼容性
|
||||
python3 -m py_compile 02_parse_score_data_py36.py
|
||||
```
|
||||
|
||||
## 环境升级建议
|
||||
|
||||
如果可能,建议升级生产环境到Python 3.8+,这样可以:
|
||||
- 使用更新的pandas版本
|
||||
- 获得更好的性能
|
||||
- 支持完整的类型注解语法
|
||||
- 使用现代的异步特性
|
||||
|
||||
## 故障排除指南
|
||||
|
||||
#### 问题1:`ImportError: No module named typing`
|
||||
```bash
|
||||
# 原因:Python版本过低(< 3.5)
|
||||
# 解决:使用无typing版本
|
||||
python3 02_parse_score_data_py34_compatible.py
|
||||
```
|
||||
|
||||
#### 问题2:`SyntaxError: invalid syntax` (f-string相关)
|
||||
```bash
|
||||
# 原因:Python版本不支持f-string(< 3.6)
|
||||
# 解决:使用.format()版本
|
||||
python3 02_parse_score_data_py36_compatible.py
|
||||
```
|
||||
|
||||
#### 问题3:依赖安装失败
|
||||
```bash
|
||||
# 检查依赖安装
|
||||
pip3 install --user -r requirements-prod.txt
|
||||
python3 test_dependencies.py
|
||||
```
|
||||
|
||||
#### 问题4:数据库连接问题
|
||||
```bash
|
||||
# 检查数据库配置
|
||||
python3 -c "from db_config import DB_CONFIG; print('配置正确')"
|
||||
```
|
||||
|
||||
#### 通用诊断命令
|
||||
```bash
|
||||
# 检查Python版本
|
||||
python3 --version
|
||||
|
||||
# 检查typing模块
|
||||
python3 -c "import typing; print('typing可用')" 2>/dev/null || echo "无typing模块"
|
||||
|
||||
# 检查依赖
|
||||
python3 -c "import pymysql, pandas, sqlalchemy; print('依赖正常')"
|
||||
|
||||
# 测试脚本语法
|
||||
python3 -m py_compile 02_parse_score_data_py34_compatible.py && echo "语法正确"
|
||||
```
|
||||
Reference in new issue
Block a user