Python 如何为seaborn创建AWS Lambda图层?
我为seaborn创建了一个用于AWS Lambda的图层,但未成功 我已尝试使用以下命令创建python环境并安装seaborn:Python 如何为seaborn创建AWS Lambda图层?,python,amazon-web-services,matplotlib,aws-lambda,seaborn,Python,Amazon Web Services,Matplotlib,Aws Lambda,Seaborn,我为seaborn创建了一个用于AWS Lambda的图层,但未成功 我已尝试使用以下命令创建python环境并安装seaborn: python -m venv python cd python/Scripts activate pip3 install seaborn 安装包,然后我使用此继承人权限组织文件夹: aws\u lambda\u python37\u layer\u seaborn\python\lib\python3.7\site packages\seaborn (站点包还
python -m venv python
cd python/Scripts
activate
pip3 install seaborn
安装包,然后我使用此继承人权限组织文件夹:
aws\u lambda\u python37\u layer\u seaborn\python\lib\python3.7\site packages\seaborn
(站点包还包含许多其他文件夹,我假定这些文件夹是seaborn的依赖项)
我从别人为matplotlib创建的图层复制了继承人权限,该图层可以作为AWS Lambda上的图层正常工作
但是,当我尝试导入seaborn时,我收到以下错误:
“errorMessage”:“无法导入模块‘lambda_函数’:没有名为‘seaborn’的模块”
我正在使用Python3.7我刚刚用
seaborn
创建了自定义层,并且可以确认它是否有效。该层显式安装一些依赖项,但不使用numpy
和scipy
。这两个包必须由AWS管理层提供AWSLambda-Python37-SciPy1x
因此,您需要在函数中使用两个层。下面创建了一个自定义的,第二个是AWSLambda-Python37-SciPy1x
使用的技术包括最近AWS博客中描述的docker工具:
['FacetGrid', 'JointGrid', 'PairGrid', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', '_orig_rc_params', 'algorithms', 'axes_style', 'axisgrid', 'barplot', 'blend_palette', 'boxenplot', 'boxplot', 'categorical', 'catplot', 'choose_colorbrewer_palette', 'choose_cubehelix_palette', 'choose_dark_palette', 'choose_diverging_palette', 'choose_light_palette', 'clustermap', 'cm', 'color_palette', 'colors', 'countplot', 'crayon_palette', 'crayons', 'cubehelix_palette', 'dark_palette', 'desaturate', 'despine', 'distplot', 'distributions', 'diverging_palette', 'dogplot', 'external', 'factorplot', 'get_data_home', 'get_dataset_names', 'heatmap', 'hls_palette', 'husl_palette', 'jointplot', 'kdeplot', 'light_palette', 'lineplot', 'lmplot', 'load_dataset', 'lvplot', 'matrix', 'miscplot', 'mpl', 'mpl_palette', 'pairplot', 'palettes', 'palplot', 'plotting_context', 'pointplot', 'rcmod', 'regplot', 'regression', 'relational', 'relplot', 'reset_defaults', 'reset_orig', 'residplot', 'rugplot', 'saturate', 'scatterplot', 'set', 'set_color_codes', 'set_context', 'set_hls_values', 'set_palette', 'set_style', 'stripplot', 'swarmplot', 'utils', 'violinplot', 'widgets', 'xkcd_palette', 'xkcd_rgb']
mylayer
requirements.txt
:--no deps
跳过任何依赖项
根据上述规定
docker run -v "$PWD":/var/task "lambci/lambda:build-python3.7" /bin/sh -c "pip install --no-deps -r requirements.txt -t python/lib/python3.7/site-packages/; exit"
mylayer.zip
创建lambda层。
别忘了将兼容运行时指定给python3.7
['FacetGrid', 'JointGrid', 'PairGrid', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', '_orig_rc_params', 'algorithms', 'axes_style', 'axisgrid', 'barplot', 'blend_palette', 'boxenplot', 'boxplot', 'categorical', 'catplot', 'choose_colorbrewer_palette', 'choose_cubehelix_palette', 'choose_dark_palette', 'choose_diverging_palette', 'choose_light_palette', 'clustermap', 'cm', 'color_palette', 'colors', 'countplot', 'crayon_palette', 'crayons', 'cubehelix_palette', 'dark_palette', 'desaturate', 'despine', 'distplot', 'distributions', 'diverging_palette', 'dogplot', 'external', 'factorplot', 'get_data_home', 'get_dataset_names', 'heatmap', 'hls_palette', 'husl_palette', 'jointplot', 'kdeplot', 'light_palette', 'lineplot', 'lmplot', 'load_dataset', 'lvplot', 'matrix', 'miscplot', 'mpl', 'mpl_palette', 'pairplot', 'palettes', 'palplot', 'plotting_context', 'pointplot', 'rcmod', 'regplot', 'regression', 'relational', 'relplot', 'reset_defaults', 'reset_orig', 'residplot', 'rugplot', 'saturate', 'scatterplot', 'set', 'set_color_codes', 'set_context', 'set_hls_values', 'set_palette', 'set_style', 'stripplot', 'swarmplot', 'utils', 'violinplot', 'widgets', 'xkcd_palette', 'xkcd_rgb']
我的帖子的公认答案适用于Linux,也适用于Windows,只需稍加调整。 对于偶然发现这篇文章的Windows用户,以下是我创建自己的图层所要做的: Docker无法在我的计算机上正常运行的原因是我使用的Windows 10版本。我有Windows 10 Home,我需要专业人员或企业来正确运行Docker。升级到Windows Professional后,我能够正确安装Docker 正确安装Docker后,我就可以运行@Marcin的命令了 但因为这是针对Windows的,所以我需要将“$PWD”更改为“%cd%” 像这样:
docker run-v“%cd%”:/var/task“lambci/lambda:build-python3.7”/bin/sh-c”pip安装——无deps-r requirements.txt-t python/lib/python3.7/site-packages/;退出“
运行此命令后,docker应立即提示您允许文件访问指定目录。允许它让命令完成
命令完成后,请确保只压缩名为python的文件夹。因为这是针对Windows的,我不相信@Marcin的zip命令会起作用。但任何压缩软件都是足够的。我用的是7-Zip。右键单击python文件夹,选择“addtopython.zip”,瞧!您的压缩层已准备好添加到AWS Lambda。seaborn需要很多依赖项。我创建了这个图层,但它超过了70MB。您是否使用两个层来克服每层50MB的限制?我已经有了一个工作的mathplotlib层,这是seaborn的一个依赖项。这就是你的意思吗?我可以按照我的方式提供seaborn层的步骤,但是由于总大小的原因,我必须排除它的依赖性。如果这将是有益的,我可以提供一个详细的答案。是的,请这样做。谢谢这个answer@Marcin,我们有没有办法用
https://pypi.org/
,我一直在尝试使用xlrd@pc_pyr是的,您可以以类似的方式创建其他层。只需使用所需的包修改requirements.txt
。顺便说一句,如果我的回答有帮助,请接受。谢谢@Marcin,我没有发布这个问题,因此无法接受,但我投了赞成票,我得到了importorror:无法确定xlrd的版本
,对此的任何帮助都将不胜感激@如果您针对您的问题提出问题,在我看来会更好。这将允许其他人也作出贡献,而且其他人在未来更容易找到它。我也尽力帮忙。谢谢你@Marcin!我感谢你的帮助!
zip -9 -r mylayer.zip python
import json
import seaborn
def lambda_handler(event, context):
print(dir(seaborn))
['FacetGrid', 'JointGrid', 'PairGrid', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', '_orig_rc_params', 'algorithms', 'axes_style', 'axisgrid', 'barplot', 'blend_palette', 'boxenplot', 'boxplot', 'categorical', 'catplot', 'choose_colorbrewer_palette', 'choose_cubehelix_palette', 'choose_dark_palette', 'choose_diverging_palette', 'choose_light_palette', 'clustermap', 'cm', 'color_palette', 'colors', 'countplot', 'crayon_palette', 'crayons', 'cubehelix_palette', 'dark_palette', 'desaturate', 'despine', 'distplot', 'distributions', 'diverging_palette', 'dogplot', 'external', 'factorplot', 'get_data_home', 'get_dataset_names', 'heatmap', 'hls_palette', 'husl_palette', 'jointplot', 'kdeplot', 'light_palette', 'lineplot', 'lmplot', 'load_dataset', 'lvplot', 'matrix', 'miscplot', 'mpl', 'mpl_palette', 'pairplot', 'palettes', 'palplot', 'plotting_context', 'pointplot', 'rcmod', 'regplot', 'regression', 'relational', 'relplot', 'reset_defaults', 'reset_orig', 'residplot', 'rugplot', 'saturate', 'scatterplot', 'set', 'set_color_codes', 'set_context', 'set_hls_values', 'set_palette', 'set_style', 'stripplot', 'swarmplot', 'utils', 'violinplot', 'widgets', 'xkcd_palette', 'xkcd_rgb']