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

Heroku部署Django应用报No module named '_tkinter'错误如何解决

修复方案

1. 处理意外安装的matplotlib

  • 首先在本地环境安装依赖树排查工具:pip install pipdeptree
  • 执行命令查找引入matplotlib的上游依赖:pipdeptree | grep -A5 -B5 matplotlib,确认是哪个依赖包附带安装了matplotlib
  • 如果该上游依赖是本地调试用、生产环境不需要的,直接从requirements.txt中移除;如果是生产必需的依赖,优先选择该依赖的无matplotlib可选版本,比如安装时排除可选依赖
  • 清理Heroku旧的构建缓存,避免残留依赖影响:heroku builds:cache:purge -a 你的Heroku应用名称
  • 重新编写requirements.txt,不要直接使用pip freeze导出全量依赖,仅保留项目生产环境实际需要的依赖项

2. 解决PySimpleGUI依赖tkinter的报错

Heroku的运行环境为无图形界面的无头服务环境,默认不提供tkinter等GUI相关依赖,因此不能使用默认基于tkinter的PySimpleGUI版本,可根据实际使用场景选择对应方案:

  • 若PySimpleGUI仅为本地调试工具、生产环境无使用需求:
    1. 从requirements.txt中移除PySimpleGUI依赖
    2. 在项目代码中给PySimpleGUI的引入逻辑加环境判断,仅本地环境执行导入:
    import os
    # 本地开发环境提前配置ENV环境变量为local,生产环境不需要配置
    if os.getenv("ENV") == "local":
        import PySimpleGUI as sg
    else:
        sg = None
    
  • 若生产环境需要使用PySimpleGUI的相关能力:
    1. 将requirements.txt中的PySimpleGUI替换为PySimpleGUIWeb,该版本基于Web后端实现,无tkinter依赖,接口与原版PySimpleGUI基本兼容
    2. 将项目中import PySimpleGUI as sg的语句替换为import PySimpleGUIWeb as sg,无需修改其他业务逻辑即可正常运行

附加:若生产环境必须使用matplotlib

如果排查后确认matplotlib是生产必需依赖,在Django项目的settings.py文件首行加入以下配置,指定matplotlib使用无头后端,避免其调用tkinter:

import matplotlib
matplotlib.use("Agg")

内容的提问来源于stack exchange,提问作者Chinmay Datar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 05:36:04