导入matplotlib在Heroku上失败

时间:2017-04-29 15:32:47

标签: python heroku matplotlib tkinter

[(与几个月前的基本相同: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在推送应用程序时安装的版本)。

2 个答案:

答案 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的问题。