快速结论:使用 pip 安装 LiteLLM Proxy 后,在设置 TZ=Asia/Calcutta(旧版 IANA 别名)且系统缺少该时区别名文件的 Linux 主机上,proxy 会在启动阶段因时区解析失败而退出。优先排查 Python 环境的时区数据是否可用,以及操作系统是否安装了包含旧别名的时区包。
适用环境:LiteLLM v1.105.1 的 pip 安装方式(litellm[proxy]);Ubuntu 26.04(WSL)且未安装 tzdata-legacy;Python 3.14;问题报告者同时指出 1.106.6 和 main 也未声明 tzdata 依赖。Issue 讨论中提到该问题在 Ubuntu 24.04+ 不带 tzdata-legacy 的环境下同样存在。
最快修复方案:在运行 proxy 的同一 Python 虚拟环境中执行 pip install tzdata,然后重新启动;Issue 中报告此操作后 proxy 可正常启动并输出 “Application startup complete”。
注意事项:该临时方案需要手动维护依赖;已合并的修复(PR #49914)方向是把 tzdata 加入 pyproject.toml 的 proxy extra,但本 Issue 讨论中未逐项验证发布版本范围,升级前建议确认所用版本的依赖声明。评论中提出的另一种加固方案(在 proxy_server.py 的 AsyncIOScheduler(...) 中显式传入 timezone=,解析失败时回退 UTC 并告警)在讨论中仅作为可选后续项,未被确认实施。
问题场景
用户通过 pip 安装 litellm[proxy],在全新 venv 中执行 TZ=Asia/Calcutta LITELLM_MASTER_KEY=sk-test litellm --config config.yaml --port 4000 启动 LiteLLM Proxy。主机为 Ubuntu 26.04(WSL)、Python 3.14,未安装 tzdata-legacy。启动过程中调度器向 tzlocal 查询本地时区时无法解析 Asia/Calcutta,进程以退出码 3 结束。虽然 Asia/Calcutta 是指向 Asia/Kolkata 的合法 IANA 别名,但该旧别名已从 Ubuntu 24.04+ 的默认 tz 数据库中移出。
报错原文
ZoneInfoNotFoundError: 'tzlocal() does not support non-zoneinfo timezones like Asia/Calcutta. Please use a timezone in the form of Continent/City'
原因分析
最可能的原因是依赖链中的时区数据缺失。proxy extra 会引入 apscheduler,其通过 tzlocal 解析本地时区;当主机缺少旧版时区别名文件、且 pip 环境里也没有提供兜底数据的 tzdata 包时,Asia/Calcutta 无法被解析,导致启动中断。Docker 镜像此前已通过 #8915 安装了 tzdata,因此不受影响,而 pip 安装方式没有对应的依赖声明。Issue 中提到 #8657 曾报告过同一 pip 安装场景下的失败,但被标记为 stale 关闭。
环境排查
- 确认 LiteLLM 安装方式:是否为 pip 安装的
litellm[proxy],以及具体版本(Issue 报告为 v1.105.1)。 - 确认 Python 版本与虚拟环境:Issue 环境为 Python 3.14 的全新 venv。
- 确认操作系统及其时区包:Ubuntu 24.04+ 是否安装
tzdata-legacy;WSL 环境下注意确认使用的是 WSL 发行版自身的时区数据。 - 确认当前环境是否已安装
tzdata(pip install tzdata是否已执行过)。 - 确认
TZ环境变量的取值:Asia/Calcutta属于旧别名,可考虑改用Asia/Kolkata(Issue 未验证该写法,属于可优先尝试的规避方式)。
解决步骤
- 在启动 proxy 的同一虚拟环境中执行
pip install tzdata,为 Pythonzoneinfo提供时区兜底数据。 - 保持原有启动命令不变,重新执行
TZ=Asia/Calcutta LITELLM_MASTER_KEY=sk-test litellm --config config.yaml --port 4000。 - 若仍希望从系统层面解决,可安装 Ubuntu 的
tzdata-legacy包以恢复旧时区别名(Issue 只提到该包的存在,未给出具体安装命令,请按发行版文档操作)。 - 后续升级 LiteLLM 时,确认所用版本是否已将
tzdata纳入proxyextra;若已纳入,可不再手动安装。
验证方法
重新启动后,启动日志应出现 “Application startup complete”,且进程不再因 ZoneInfoNotFoundError 以退出码 3 结束;可再请求 /health 等端点,确认 proxy 已正常监听。
参考来源
BerriAI/litellm #49813;关联修复 PR:#49914;Docker 镜像相关:#8915;历史报告:#8657。
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[Bug]: response_cost is null and spend stays $0 when custom_llm_provider=anthropic and the priced row lives under a different provider](https://www.chat-gpts.plus/wp-content/uploads/2026/11/47675-f09593c8-768x403.jpg)
![[Bug]: Admin UI header search bar renders overlapping text and icons](https://www.chat-gpts.plus/wp-content/uploads/2026/11/51177-3fc387b5-768x403.jpg)
