【问题标题】:Using Shapely on AWS Lambda with Python 3在带有 Python 3 的 AWS Lambda 上使用 Shapely
【发布时间】:2018-08-19 20:47:18
【问题描述】:

我正在尝试在 Lambda 上使用 Shapely 设置技能。我得到了错误

module initialization error: Could not find lib geos_c or load any of its variants ['libgeos_c.so.1', 'libgeos_c.so'].

Python 2.7 有一个 similar question。我无法使用lambda-packs by ryfeus,因为我使用的是 Python 3.6,但我认为Graeme 描述的 EC2 方法应该可以工作。

所以我使用来自AWS docs 的公共 Amazon Linux AMI 版本启动了一个 EC2 实例

然后我运行了这些命令

$ sudo yum -y update
$ sudo yum -y install python36 python36-virtualenv python36-pip
$ mkdir ~/forlambda
$ cd ~/forlambda
$ virtualenv -p python3 venv
$ source venv/bin/activate

然后安装 Shapely 和我需要的一些其他软件包。

$ sudo yum -y groupinstall "Development Tools"
$ pip install python-dateutil
$ pip install shapely 
$ pip install pyproj 
$ pip install pyshp

然后我运行了我的技能(在 EC2 实例上),它可以工作了!然后我复制了 venv/lib/python3.6/site-packages 中的文件,加上 myskill.py 并将它们压缩,上传到 Lambda,仍然得到 geos_c 错误,如上所示:(

我已经能够上传我的技能的缩小版本(减去 Shapely,但包括 Lambda 未附带的其他软件包)并且它适用于 Lambda,所以我不认为这是一个错误我正在压缩或上传。

我错过了什么吗?使用“sudo yum install”而不是“pip install”安装开发工具有什么不同吗?

【问题讨论】:

    标签: python-3.x amazon-ec2 aws-lambda alexa shapely


    【解决方案1】:

    出于某种原因,Shapely 和 Pyproj 的 pip 安装并没有出现在 virtualenv 站点包中。从一个新的 EC2 实例中,我运行了这些命令:

    $ sudo yum -y update
    $ sudo yum -y install python36 python36-virtualenv python36-pip
    $ mkdir ~/forlambda
    $ cd ~/forlambda
    $ virtualenv -p python3 venv
    $ source venv/bin/activate
    
    (venv) $ sudo yum -y groupinstall "Development Tools"
    (venv) $ pip install python-dateutil
    (venv) $ pip install shapely -t ~/forlambda/venv/lib/python3.6/site-packages/
    (venv) $ pip install pyproj -t ~/forlambda/venv/lib/python3.6/site-packages/
    (venv) $ pip install pyshp
    

    然后将 site-packages/ 加上 myskill.py 的所有内容压缩,上传到 Lambda,它就可以工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-18
      • 1970-01-01
      • 2016-07-08
      • 2018-04-12
      • 1970-01-01
      • 2017-04-30
      • 1970-01-01
      • 2017-04-05
      相关资源
      最近更新 更多