DataOps Platform 的时区功能已兼容 Python 3.8 和 Python 3.9+。
app/core/common/timezone_utils.py 使用了兼容性导入:
try:
# Python 3.9+
from zoneinfo import ZoneInfo
except ImportError:
# Python 3.8 使用 backports
from backports.zoneinfo import ZoneInfo
必须安装: backports.zoneinfo
pip install backports.zoneinfo
tzdata
bash
sudo apt-get update
sudo apt-get install -y tzdata
zoneinfo,无需额外安装系统依赖: tzdata
sudo apt-get update
sudo apt-get install -y tzdata
backports.zoneinfotzdata# 进入虚拟环境
cd /opt/dataops-platform
source venv/bin/activate
# 测试时区模块
python -c "
try:
from zoneinfo import ZoneInfo
print('使用标准库 zoneinfo (Python 3.9+)')
except ImportError:
from backports.zoneinfo import ZoneInfo
print('使用 backports.zoneinfo (Python 3.8)')
from datetime import datetime
tz = ZoneInfo('Asia/Shanghai')
now = datetime.now(tz)
print(f'当前东八区时间: {now}')
"
预期输出:
使用 backports.zoneinfo (Python 3.8)
当前东八区时间: 2026-01-12 18:30:45.123456+08:00
确保 requirements.txt 包含以下内容:
# Python 3.8 时区支持
backports.zoneinfo>=0.2.1; python_version < "3.9"
这样可以:
backports.zoneinfo原因: Python 3.8 环境未安装 backports.zoneinfo
解决:
pip install backports.zoneinfo
原因: 系统缺少时区数据
解决:
sudo apt-get update
sudo apt-get install -y tzdata
测试代码:
import sys
try:
from zoneinfo import ZoneInfo
print(f"使用标准库 zoneinfo: {sys.modules['zoneinfo']}")
except ImportError:
from backports.zoneinfo import ZoneInfo
print(f"使用 backports.zoneinfo: {sys.modules['backports.zoneinfo']}")
当升级 Python 版本时:
backports.zoneinfo
bash
pip uninstall backports.zoneinfo
3. 验证: 运行测试确保时区功能正常
## 性能考虑
- backports.zoneinfo 和标准库 zoneinfo 性能基本相同
- 两者都使用系统的 IANA 时区数据库
- 升级到 Python 3.9+ 后无性能差异
## 相关文件
- 时区工具模块: app/core/common/timezone_utils.py
- 修复脚本: scripts/fix_startup.sh
- 故障排查: scripts/TROUBLESHOOTING.md
- 快速修复: QUICK_FIX.md