部署使用PIL的Django应用到Heroku时出现No module named _tkinter错误
问题原因
你导入的ImageTk是PIL中专门用于对接Tkinter图形界面的组件,导入动作本身就会触发依赖加载逻辑,和你后续是否调用相关功能无关。Heroku的服务器属于无头无图形界面环境,默认没有预装Tkinter相关依赖,因此会抛出_tkinter模块缺失的错误。
解决方案
按你的实际使用场景选择对应方案即可:
- 如果你确认项目全程不需要用到
ImageTk的功能:直接删除from PIL import ImageTk as itk这行导入语句即可,不会影响PIL.Image的正常使用。 - 如果你因为代码复用/多环境适配需求需要保留导入语句:给导入逻辑加异常捕获,无头环境下跳过加载即可
import PIL.Image try: from PIL import ImageTk as itk except ImportError: # 无Tkinter环境时赋值占位对象,避免后续引用itk时报错 itk = None - 如果你确实需要用到
ImageTk的相关能力:在项目根目录新增名为Aptfile的文件,写入内容python3-tk,重新推送部署后Heroku会自动安装对应的Tkinter依赖。
内容的提问来源于stack exchange,提问作者Achyut。
相关产品推荐
相关产品推荐

