[(与几个月前的基本相同:import matplotlib failing with No module named _tkinter on heroku 。但是,提供的唯一解决方案似乎不起作用。 (不幸的是,由于我没有足够的StackOverflow声誉,我无法评论那里给出的答案。))]
我一直在我的应用中使用matplotlib进行策划。一切都在当地很好。但是,当我将我的应用程序推送到Heroku时,我收到错误:
import _tkinter # If this fails your Python may not be configured for Tk
ImportError: No module named _tkinter
我试图通过以下方式规避Tkinter:
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt, mpld3
然而,这仍然会引发同样的错误。
有没有人为此找到解决方案或者有matplotlib的Heroku应用程序正在运行?我正在运行Python 2.7.13(这也是Heroku在推送应用程序时安装的版本)。
答案 0 :(得分:4)
对我而言,这有效:
将matplotlib后端从tkinter更改为其他内容。在程序的一开始执行此操作:
import matplotlib
matplotlib.use('Agg')
这样程序的其余部分将使用你设置的后端('Agg','SVG'等等)
另一种选择是尝试使用matplotlibrc文件:https://matplotlib.org/users/customizing.html#the-matplotlibrc-file
答案 1 :(得分:2)
我联系了Heroku支持并得到了以下答案:
“默认的Heroku Python构建版不包含成功导入tkinter所需的库。您可以在此处找到我们默认提供的基础库列表:https://devcenter.heroku.com/articles/cedar-ubuntu-packages
在这些情况下,我们为开发人员提供了使用第三方构建包https://devcenter.heroku.com/articles/third-party-buildpacks扩展平台的机会,其中许多可以在https://elements.heroku.com/buildpacks浏览这些包。这些可以在以下位置安装额外的包和依赖项部署时间。
请注意,第三方buildpack是一个选项,但不支持buildpack本身。他们可能不会被原作者维护并停止工作。如果是这种情况,您需要联系原作者,看看他们是否可以提供帮助。在这篇SO帖子上有一些建议,其他用户使用自定义Python构建包来成功运行https://stackoverflow.com/a/18184536
另一种选择可能是在这里使用实验性的Apt buildpack:https://github.com/heroku/heroku-buildpack-apt你需要运行
heroku buildpacks:add --index 1 https://github.com/heroku/heroku-buildpack-apt
您还需要在项目的根目录中添加名为Aptfile的文件,其中包含以下内容:
python3-tk
不幸的是,这个Aptfile没有相同的依赖关系解析,所以你必须手动指定任何其他包。“
我安装了以下buildpack:https://github.com/thenovices/heroku-buildpack-scipy。这解决了matplotlib的问题。