Google app engine deploy flask app - ImportError:libSM.so.6:无法打开共享对象文件:没有这样的文件或目录

时间:2018-05-01 16:21:05

标签: python opencv google-app-engine

我正在尝试将一个python flask应用程序部署到谷歌云。应用程序开始运行后,我收到以下错误:

  File "/home/vmagent/app/app.py", line 11, in <module>
    import cv2
  File "/env/lib/python3.4/site-packages/cv2/__init__.py", line 9, in <module>
    from .cv2 import *
ImportError: libSM.so.6: cannot open shared object file: No such file or directory

对这个问题做了一些研究,我发现这似乎是一个与opencv-python相关的问题,下面这行应该解决linux上的问题:

sudo apt-get install libsm6

但是,由于我使用的是Mac,我无法使用apt-get在本地安装libsm6,因为我使用不接受apt-get的requirements.txt文件进行部署,所以我无法修复此问题。我尝试在谷歌云上连接到正在运行的实例,但它也不接受apt-get install libsm6,告诉我我缺乏管理员权限:

E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?

将目录更改为root也没有帮助。有谁知道如何解决这个问题?

我也尝试过python版本3.5和3.4而没有运气。

2 个答案:

答案 0 :(得分:2)

根据这些信息,我假设您没有使用虚拟环境。如果Google Cloud为您提供此错误,那是因为您引用的python包未安装在项目的/ lib中。如果您遵循此Getting started guide,您会注意到它首先建议创建虚拟环境,然后使用requirements.txt文件基本上复制Google Apps上的确切环境,因此

pip install -t lib -r requirements.txt

我的建议是密切关注入门和github示例,并注意lib文件夹中pip安装方面的差异。

更新:仔细查看堆栈跟踪,问题似乎源自cv2库,具体取决于libSM.so.6,它是一个C库。关于python项目中的C库,Google App Engine非常挑剔。

建议尝试使用替代库来处理cv2所做的任何事情,这是一个纯Python的库。

答案 1 :(得分:2)

由于您使用的是灵活环境,因此您可以根据相应的谷歌提供的docker镜像创建自定义运行时,在该镜像中添加应用程序所需的其他依赖项。来自About Custom Runtimes

  

自定义运行时允许您定义新的运行时环境   可能包括其他组件,如语言解释器或   应用服务器。

另见Building Custom Runtimes