You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中pytz是否已弃用?Django 4.0+为何改用zoneinfo?

Django时区处理:pytz vs zoneinfo

在Django 3.2及以下版本的《选择当前时区》文档中,使用pytz实现时区中间件,示例代码如下:

import pytz # Here

from django.utils import timezone

class TimezoneMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        tzname = request.session.get('django_timezone')
        if tzname:
            timezone.activate(pytz.timezone(tzname))
        else:
            timezone.deactivate()
        return self.get_response(request)

而在Django 4.0及以上版本的同章节文档中,官方改用zoneinfo替代pytz,示例代码如下:

import zoneinfo # Here

from django.utils import timezone

class TimezoneMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        tzname = request.session.get('django_timezone')
        if tzname:
            timezone.activate(zoneinfo.ZoneInfo(tzname))
        else:
            timezone.deactivate()
        return self.get_response(request)

问题解答

1. 目前或未来Python中的pytz是否会被弃用?

pytz目前未被官方标记为弃用,但已进入仅做关键修复的维护阶段。随着Python 3.9引入标准库zoneinfo,pytz作为第三方库的必要性大幅降低。未来它不会被立刻移除,但社区重心会逐步转向zoneinfo,新项目推荐使用标准库方案,老项目可继续使用pytz直到完成迁移。

2. 为何Django 4.0及以上版本的文档不再使用pytz?

  • 依赖轻量化:zoneinfo是Python 3.9+的标准库,无需额外安装,减少了项目的依赖管理负担。
  • API更规范:zoneinfo的设计符合Python标准时间处理规范,与datetime模块集成更自然,规避了pytz特有的一些兼容性问题(比如本地化datetime对象的特殊处理逻辑)。
  • 维护成本降低:依赖标准库后,Django无需再适配pytz的版本更新,用户也能直接享受Python官方对时区数据的维护支持。

内容的提问来源于stack exchange,提问作者Super Kai - Kazuya Ito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 12:52:23