Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何为seaborn创建AWS Lambda图层?_Python_Amazon Web Services_Matplotlib_Aws Lambda_Seaborn - Fatal编程技术网

Python 如何为seaborn创建AWS Lambda图层?

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 (站点包还

我为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

(站点包还包含许多其他文件夹,我假定这些文件夹是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
  • 运行以下docker命令:
  • 注意使用
    --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"
    
  • 将图层创建为zip:
  • 基于AWS控制台中的
    mylayer.zip
    创建lambda层。 别忘了将
    兼容运行时指定给
    python3.7

  • 使用以下lambda函数在lambda中测试层:

  • 函数正确执行

    ['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']