如何修复树莓派上Pytz出现的未知时区错误?
解决树莓派Pi3上Pytz UnknownTimeZoneError: 'SystemV/EST5EDT'问题
我之前在树莓派3上折腾Flask定时任务的时候也碰到过几乎一模一样的问题!当时也是初始化BackgroundScheduler()的时候直接炸了,报的错和你完全一致,折腾了好一会儿才搞定,给你分享几个靠谱的解决办法:
1. 问题根源:系统时区用了Pytz不兼容的格式
树莓派默认的时区设置里,有些选项是SystemV格式的(比如你碰到的EST5EDT),而Pytz只认IANA标准时区(像Asia/Shanghai、America/New_York这种),所以当BackgroundScheduler自动读取系统时区时就会触发错误。
具体解决方法
方法一:修改树莓派系统时区(最彻底)
直接把系统时区换成Pytz支持的IANA格式:
- 用图形化配置工具:
运行sudo raspi-config,依次选择Localisation Options->Change Timezone,然后选你所在的地区和城市(比如Asia->Shanghai),不要选SystemV开头的选项。 - 或者用命令行快速设置:
把sudo timedatectl set-timezone Asia/ShanghaiAsia/Shanghai换成你需要的时区就行。 - 验证:运行
timedatectl,看输出里的Time zone是不是IANA格式的,比如Asia/Shanghai (CST, +0800)。
方法二:强制给BackgroundScheduler指定时区
如果不想改系统时区,初始化调度器的时候直接指定一个Pytz能识别的时区就行:
from pytz import timezone from apscheduler.schedulers.background import BackgroundScheduler # 示例:指定上海时区 scheduler = BackgroundScheduler(timezone=timezone('Asia/Shanghai')) # 或者用UTC时区(更稳妥,适合跨时区场景) # scheduler = BackgroundScheduler(timezone='UTC')
方法三:更新Pytz版本
树莓派自带的Python3.4可能搭配的Pytz版本比较旧,时区数据不全,更新一下:
先激活你的虚拟环境:
source /home/pi/Documents/flask_projects/unexpected_two/venv/bin/activate
然后更新Pytz:
pip install --upgrade pytz
额外排查步骤
- 先确认系统当前的时区:
如果输出是python -c "import os; print(os.environ.get('TZ'))"SystemV/EST5EDT,那就是系统时区的问题无疑。 - 检查Pytz支持的时区列表:
看看你想用的时区在不在里面,不在的话就需要更新Pytz或者换标准时区。python -c "import pytz; print('\n'.join(pytz.all_timezones))"
我当时是用方法一搞定的,改完系统时区后直接就不报错了,你可以先试试这个!
内容的提问来源于stack exchange,提问作者mishap_n
相关产品推荐
相关产品推荐

