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

Python Google app engine deploy flask app-ImportError:libSM.so.6:无法打开共享对象文件:没有这样的文件或目录,python,opencv,google-app-engine,Python,Opencv,Google App Engine,我正在尝试将python flask应用程序部署到google云。一旦应用程序开始运行,我会收到以下错误: 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

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

  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
然而,由于我使用的是Mac,我无法使用apt get在本地安装libsm6,并且由于我使用的是requirements.txt文件,该文件不接受apt get,因此我无法修复此问题。我试图通过SSH连接到google cloud上正在运行的实例中,但它也不接受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?
将目录更改为根目录也没有帮助。有人知道如何解决这个问题吗


我也尝试过python版本3.5和3.4,但运气不佳

根据这些信息,我假设您没有使用虚拟环境。如果GoogleCloud给您这个错误是因为您引用的python包没有安装在项目的/lib中。如果你遵循这一点,你会注意到它建议首先创建一个虚拟环境,然后使用requirements.txt文件在Google应用程序上基本上复制这个精确的环境,因此

pip install -t lib -r requirements.txt
我的建议是密切关注getting started和github示例,并注意lib文件夹中pip安装方面的差异

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


建议尝试为cv2所做的任何事情使用一个替代库,一个纯Python的库。

由于您使用的是灵活的环境,您可以根据相应的google提供的docker映像创建自定义运行时,在其中添加应用程序所需的其他依赖项。发件人:

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


另请参见。

文章似乎建议使用flex env。这是对的吗?是的,在我的app.yaml中写着‘env:flex’——正如google Cloud的flask演示中所建议的那样,我使用的是anaconda,因此我使用的是conda虚拟环境。也可以吗?我一直在密切关注该指南,因此我使用'pip install-t lib-r requirements.txt'命令安装了所有模块,该命令生成一个lib文件夹,其中包含所有模块。然而,在部署时,代码向我抛出了上面看到的错误。另一方面,如果我使用requirements.txt文件在本地安装我的虚拟环境的模块,一切都正常。@a我能说的是libSM.so库是C库,并不总是安装在云上提供给你的机器上。您不可能在您的Google应用程序引擎环境中安装C库,看起来cv2依赖于此。建议:尝试使用纯python的库来完成与CV2相同的操作。这是一个有趣的选项,我不知道,非常感谢!为了创建自定义运行时,我是否正确地理解了在部署之前必须自己对应用程序进行dockerize的文档?在部署期间查看我的控制台日志,我觉得使用“gcloud app deploy”确实会在尝试启动我的应用程序之前对其进行dockerize,因此我希望访问google cloud创建的映像,但我找不到有关如何访问该映像的任何信息。在谷歌云上的项目控制台中使用“docker图像”不会显示任何结果。flex无论如何都会使用docker。这只是定制要使用的图像的问题。第二个参考中有指向基本/标准图像的指针。您只需提供要使用的自定义dockerfile,而不是标准dockerfile。
pip install -t lib -r requirements.txt