Reg*_*sor 3 python lambda numpy amazon-web-services scikit-learn
我正在尝试使用Python创建一个AWS Lambda函数。我想要创建一个zip部署程序包,然后将其上传到我的AWS环境中,而不是一个内联函数。我的源代码位于test.py文件中,而其他依赖项(如numpy,sklearn等)与源代码位于同一文件夹中。
我测试我的lambda函数时遇到错误。
无法导入模块'test':没有名为'sklearn .__ check_build._check_build'的模块___________________________________________________________________________ / var / task / sklearn / __ check_build的内容:setup.py
__pycache__ _check_build.cp36-win_amd64.pyd __init__.py ____________________________________________学习尚未正确构建。如果您已经从源代码安装了scikit-learn,请不要忘记在使用之前构建该软件包:运行python setup.py install或make在源目录中。如果您使用了安装程序,请检查它是否适合您的Python版本,操作系统和平台。
这是我驻留在test.py中的python源代码
from sklearn.model_selection import train_test_split
print('Loading function')
def lambda_handler(event, context):
#print("Received event: " + json.dumps(event, indent=2))
print("value1 is " + event['key1'])
print("value2 is " + event['key2'])
print("value3 is " + event['key3'])
return event
Run Code Online (Sandbox Code Playgroud)
如果我在源代码中导入numpy,则会遇到类似的问题。(无法导入多数组)
我正在使用安装每个库pip install numpy/scikit-learn -t /path/to/mydir/。
请帮助我解决问题。谢谢 !!
这里可能有两个问题:
C需要pip install在具有与Lambda函数运行的体系结构相同的体系结构的机器上构建()具有绑定的Python软件包。为了解决#1,我使用了官方的Python Docker镜像。
docker run --rm -it \
-v `pwd`:/code \
python:2 bash
Run Code Online (Sandbox Code Playgroud)
现在,无论您执行什么操作pip install -t lib numpy或类似操作,都将获得正确的.so文件。这里的技巧是使用volume参数(-v),这样当您关闭容器时,该lib目录将保留在您的主机上。
为了解决2,我总是像这样构造我的无服务器/ lambda项目:
$ tree -L 2
.
??? handler.py
??? lib
? ??? numpy
??? serverless.yml
Run Code Online (Sandbox Code Playgroud)
也就是说,我所有的依赖项都进入了内部lib。
pip install -t lib numpy
Run Code Online (Sandbox Code Playgroud)
在的顶部handler.py,我总是有以下4行:
import os
import sys
CWD = os.path.dirname(os.path.realpath(__file__))
sys.path.insert(0, os.path.join(CWD, "lib"))
# now it's ok to import extra libraries
import numpy as np
Run Code Online (Sandbox Code Playgroud)
之后的sys.path.insert,任何进口你的包会工作。
| 归档时间: |
|
| 查看次数: |
1860 次 |
| 最近记录: |