使用无服务器的 Numpy lambda 错误

Numpy lambda error using serverless

我正在 mac OSX 并在 AWS 上部署 python lambda。

我已经按照这些说明创建了本地环境源 venv/bin/activate。

https://serverless.com/blog/serverless-python-packaging/

我已经安装了所有的包

$ pip install numpy

Requirement already satisfied: numpy in ./venv/lib/python3.5/site-packages (1.14.2)

然后我使用

部署包
pip freeze > requirements.txt

serverless deploy 

在 lambda

上 运行 时出错

START RequestId: ################### Version: $LATEST Unable to import module 'main': Missing required dependencies ['numpy']

另请注意:我的代码不是在调用 numpy,而是在调用 quandl,而 quandl 在调用 numpy

requirements.txt

asn1crypto==0.24.0
certifi==2018.4.16
cffi==1.11.5
chardet==3.0.4
cryptography==2.2.2
idna==2.6
inflection==0.3.1
more-itertools==4.1.0
ndg-httpsclient==0.4.4
numpy==1.14.2
pandas==0.22.0
pyasn1==0.4.2
pycparser==2.18
pyOpenSSL==17.5.0
python-dateutil==2.7.2
pytz==2018.4
Quandl==3.3.0
requests==2.18.4
six==1.11.0
urllib3==1.22

运行 ec2 上的相同代码。看起来它的 numpy 在调用它时遇到问题。

我将以下内容添加到 python 文件

import os
import sys

CWD = os.path.dirname(os.path.realpath(__file__))
sys.path.insert(0, os.path.join(CWD, "lib"))
# end magic four lines

错误

Traceback (most recent call last):
  File "__main__.py", line 11, in <module>
    import quandl
  File "/home/ubuntu/bots/ssali/quandl/__init__.py", line 7, in <module>
    from .model.database import Database
  File "/home/ubuntu/bots/ssali/quandl/model/database.py", line 18, in <module>
    import quandl.model.dataset
  File "/home/ubuntu/bots/ssali/quandl/model/dataset.py", line 5, in <module>
    from .data import Data
  File "/home/ubuntu/bots/ssali/quandl/model/data.py", line 1, in <module>
    from quandl.operations.data_list import DataListOperation
  File "/home/ubuntu/bots/ssali/quandl/operations/data_list.py", line 1, in <module>
    from quandl.model.data_list import DataList
  File "/home/ubuntu/bots/ssali/quandl/model/data_list.py", line 2, in <module>
    from .data_mixin import DataMixin
  File "/home/ubuntu/bots/ssali/quandl/model/data_mixin.py", line 1, in <module>
    import pandas as pd
  File "/home/ubuntu/bots/ssali/pandas/__init__.py", line 19, in <module>
    "Missing required dependencies {0}".format(missing_dependencies))
ImportError: Missing required dependencies ['numpy']

我认为这里有两个问题:

  1. AWS Lambda 只支持 Python 2.7 和 3.6 所以我们应该使用 3.6 而不是 3.5
  2. 像 Numpy 这样需要编译的包需要为 Linux 构建。如果您使用 Windows 或 OSX,则需要通过 Docker 安装这些软件包。无服务器包含一个方便的配置。确保以下内容在您的 serverless.yml.

来自https://serverless.com/blog/serverless-python-packaging/

plugins:
  - serverless-python-requirements

custom:
  pythonRequirements:
    dockerizePip: non-linux