我正在尝试使用Python创建AWS lambda函数。我想要创建一个zip部署包,然后在我的AWS环境中上传它,而不是内联函数。我的源代码在test.py文件中,其他依赖项如numpy,sklearn等与我的源代码在同一个文件夹中。
我在测试lambda函数时遇到错误。
无法导入模块'测试':没有命名的模块 ' sklearn .__ check_build._check_build' ___________________________________________________________________________ / var / task / sklearn / __ check_build的内容:setup.py
__pycache__ _check_build.cp36-win_amd64.pyd __init__.py ___________________________________________________________________________似乎scikit-learn还没有正确构建。如果你有 安装scikit-从源头学习,请不要忘记构建 在使用之前打包:运行python setup.py install
或make
源目录。如果您使用过安装程序,请检查 它适用于您的Python版本,操作系统和您的 平台。
这是我的python源代码,它位于test.py
中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
如果我在源代码中导入numpy,我将遇到类似的问题。 (无法导入多阵列)
我使用pip install numpy/scikit-learn -t /path/to/mydir/
安装每个库。
Here is the folder structure after I use pip install commands
请帮我解决问题。谢谢!!
答案 0 :(得分:4)
这里可能存在两个问题:
C
绑定的Python包(<{1}} 要解决#1,我使用官方的Python Docker镜像。
pip install
现在,每当您执行docker run --rm -it \
-v `pwd`:/code \
python:2 bash
之类的操作时,您都会获得正确的pip install -t lib numpy
个文件。这里的技巧是使用volume参数(.so
),这样当你在-v
目录下关闭容器的时候就会保留在你的主机上。
要解决2,我总是这样构建我的无服务器/ lambda项目:
lib
也就是说,我的所有依赖关系都在$ tree -L 2
.
├── handler.py
├── lib
│ └── numpy
└── serverless.yml
内。
lib
在pip install -t lib numpy
的顶部,我总是有这4行:
handler.py
在 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
之后,您的软件包的所有导入都将有效。