我正在尝试将一个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而没有运气。
答案 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:
自定义运行时允许您定义新的运行时环境 可能包括其他组件,如语言解释器或 应用服务器。