在 Heroku 上导入 matplotlib 失败
Posted
技术标签:
【中文标题】在 Heroku 上导入 matplotlib 失败【英文标题】:import matplotlib failing on Heroku 【发布时间】:2017-09-27 14:10:54 【问题描述】:[(与几个月前的基本相同:import matplotlib failing with No module named _tkinter on heroku .但是,提供的唯一解决方案似乎不起作用。 (不幸的是,我无法评论那里给出的答案,因为我没有足够的 *** 声誉。)]
我一直在我的应用程序中使用 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 在推送应用时安装的版本)。
【问题讨论】:
【参考方案1】:对我来说这是可行的:
将 matplotlib 后端从 tkinter 更改为其他内容。在程序的一开始执行以下操作:
import matplotlib
matplotlib.use('Agg')
这样程序的其余部分将使用您设置的后端(“Agg”、“SVG”等)
另一种选择是尝试处理 matplotlibrc 文件:https://matplotlib.org/users/customizing.html#the-matplotlibrc-file
【讨论】:
【参考方案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 浏览其中的许多包,这些可以在部署时安装额外的包和依赖项。
请注意,第三方构建包是一种选择,但构建包本身不受支持。它们可能不由原始作者维护并且已停止工作。如果是这种情况,您需要联系原作者,看看他们是否可以提供帮助。在这篇 SO 帖子上有一些建议,其他用户已经使用自定义 Python 构建包成功运行了这个https://***.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 的问题。
【讨论】:
在 Heroku 中使用 python3.5 尝试这个,但是我仍然遇到同样的错误。我在这里发布了我的问题:***.com/questions/46051175/… 还有更多想法吗? 不幸的是,没有。我也被困了一段时间。上述解决方案对我有用,但由于 Python 版本不同,可能对您不起作用。也许您可以尝试找到适用于 Python 3.5 的 buildpack。 你能提供更多关于使用这个东西的信息吗?我不明白如何使用它。以上是关于在 Heroku 上导入 matplotlib 失败的主要内容,如果未能解决你的问题,请参考以下文章
在 parmap 上使用 pyinstaller 会导致 tkinter matplotlib 导入错误。为啥?