不能让opencv在heroku上工作

Posted

技术标签:

【中文标题】不能让opencv在heroku上工作【英文标题】:Cant make opencv work on heroku 【发布时间】:2018-03-17 16:49:30 【问题描述】:

我正在尝试让 opencv 在 Heroku 上运行,但在服务器的日志文件中出现以下错误:

2017-10-05T23:17:08.145096+00:00 heroku[web.1]: State changed from crashed to starting
2017-10-05T23:17:19.477843+00:00 heroku[web.1]: Starting process with command `python Main.py`
2017-10-05T23:17:23.469550+00:00 heroku[web.1]: State changed from starting to crashed
2017-10-05T23:17:23.458477+00:00 heroku[web.1]: Process exited with status 1
2017-10-05T23:17:23.268234+00:00 app[web.1]: Traceback (most recent call last):
2017-10-05T23:17:23.268249+00:00 app[web.1]:   File "Main.py", line 3, in <module>
2017-10-05T23:17:23.268434+00:00 app[web.1]:     from MostDominantColor import get_color
2017-10-05T23:17:23.268541+00:00 app[web.1]:   File "/app/utils.py", line 3, in <module>
2017-10-05T23:17:23.268435+00:00 app[web.1]:   File "/app/MostDominantColor.py", line 2, in <module>
2017-10-05T23:17:23.268538+00:00 app[web.1]:     import utils
2017-10-05T23:17:23.268648+00:00 app[web.1]:     import cv2
2017-10-05T23:17:23.268790+00:00 app[web.1]: ImportError: libSM.so.6: cannot open shared object file: No such file or directory
2017-10-05T23:17:23.268663+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/cv2/__init__.py", line 9, in <module>
2017-10-05T23:17:23.268776+00:00 app[web.1]:     from .cv2 import *

在 __init__.py 文件的第 9 行有一段代码只对 IDE 的自动补全有用:

8 # make IDE's (PyCharm) autocompletion happy
9 from .cv2 import *

我知道这行在我的代码中导入 cv2 时会导致问题,有没有办法从服务器中删除该行(知道 cv2 库是由服务器端的 pip 下载的,所以我不能只是推送通过 git 对 Heroku 进行这样的编辑)

欢迎任何建议!

python : 3.6.2
opencv-python==3.3.0.10

【问题讨论】:

【参考方案1】:

这是一个依赖问题,我需要安装这个:

apt-get install libsm6 libxrender1 libfontconfig1

Ps:Heroku 的免费帐户不包括 ssh 连接,所以我切换到 Google Cloud Platform 并且它可以工作。

【讨论】:

有关 Heroku 平台的解决方案,请参阅此答案:***.com/a/51004957/660711【参考方案2】:

您必须安装一些依赖项,因为 Heroku 不会自动为您安装。

    在您的项目目录中添加一个Aptfile并添加以下文件

libsm6

libxrender1

libfontconfig1

libice6

注意:Aptfile 不应有任何 .txt 或任何其他扩展名。就像 配置文件

    将编辑好的代码推送到 Github

    在 Heroku 仪表板中, 转到您的应用程序 --> 设置 --> buildpacks --> 添加 buildpacks --> https://github.com/heroku/heroku-buildpack-apt.git 复制并粘贴此链接 --> 添加 buildpack

    部署您的应用

buildpack adding

【讨论】:

以上是关于不能让opencv在heroku上工作的主要内容,如果未能解决你的问题,请参考以下文章

Socket io 和 Node 在本地工作,但不能在 heroku 上工作

Opencv VideoCapture 在 Heroku 上总是返回 false

如何让 mod_rewrite 在 Heroku 上工作?

在 Heroku 上运行 Django/React 应用程序时,如何让 collectstatic 工作?

我创建了一个 django 软件,它在 localhost 上运行,但不能在 heroku 上工作,它的日志显示了这个

使用带有 bootstrap-sass gem 的 Rails 4 无法让 CSS 在 Heroku 上工作