我很难理解如何最好地管理python包以获取AWS lambda函数的压缩。
在我的项目文件夹中,我有许多.py
个文件。作为构建过程的一部分,我将它们压缩并使用AWS API创建和发布我的lambda函数,该函数提供zip文件作为该调用的一部分。
因此,我相信我需要在项目文件夹中拥有lambda所依赖的所有包。
考虑到这一点,我打电话给pip
如下:
pip install -t . tzlocal
这似乎填满了我的项目文件夹中的大量内容,我不确定是否需要将所有内容压缩到我的lambda函数部署中,例如。
.\pytz
.\pytz-2018.4.dist-info
.\tzlocal
...
...
第一个问题 - 所有这些东西都需要压缩到我的lambda中吗?
如果没有,我如何获得一个包,只提供我需要进入我的zip文件的位?
来自.Net / Node背景 - 与前者我NuGet我的包进入一个很好的packages
文件夹,只包含我需要的.dll
文件,然后我引用到我的项目中
如果我做需要所有这些文件,那么有办法将它们“放”到更整洁的地方 - 比如在包文件夹中吗?
最后,有没有办法只下载我真正需要的二进制文件?我在这里看到的问题是,Lambda函数需要与我在桌面开发环境(Windows)上使用的二进制文件不同的二进制文件,因此不确定如何解决该问题。
答案 0 :(得分:1)
例如numpy
使用的二进制库应该在AWS Linux上编译以处理lambda。我发现本教程很有用(https://serverlesscode.com/post/deploy-scikitlearn-on-lamba/)。甚至有更新版本的它使用docker容器,所以你不需要EC2实例进行编译,你可以在本地做所有事情。
至于软件包:AWS文档说要将所有内容安装到根目录,但您可以将它们全部安装在./packages
目录中,如果lambda处理程序代码
import os
import sys
cwd = os.getcwd()
package_path = os.path.join(cwd, 'packages')
sys.path.append(package_path)