如何在 lambda 层中本地调试依赖项?

2023-12-15

我正在从 dockerfile 创建一个 lambda 层,它将 python 包安装到一个目录并压缩结果。

FROM amazonlinux

WORKDIR /
RUN yum update -y

# Install Python 3.7
RUN yum install python3 zip -y

RUN pip3.7 install --upgrade pip

# Install Python packages
RUN mkdir /packages
RUN echo "opencv-python" >> /packages/requirements.txt

RUN mkdir -p /packages/opencv-python-3.7/python/lib/python3.7/site-packages
RUN pip3.7 install -r /packages/requirements.txt -t /packages/opencv-python-3.7/python/lib/python3.7/site-packages


# Create zip files for Lambda Layer deployment
WORKDIR /packages/opencv-python-3.7/
RUN zip -r9 /packages/cv2-python37.zip .
WORKDIR /packages/
RUN rm -rf /packages/opencv-python-3.7/

对于这个 Dockerfile 我可以成功部署。
现在我想添加更多库,但是尽管 docker 构建和上传成功,但在执行 lambda 函数时出现错误(未找到 numpy)。 我想要一种比更改 Docker 文件、构建、提取和上传 zip 文件以及在 AWS 管理控制台中按“测试”更简单的方法来调试此问题。

我尝试在本地运行 docker 容器,然后在那里安装软件包,看看是否可以将所有内容导入到 python shell 中,但我什至无法通过这种方式重新创建原始容器:

bash-4.2# pip3.7 install opencv-python
Collecting opencv-python
  Using cached opencv_python-4.4.0.42-cp37-cp37m-manylinux2014_x86_64.whl (49.4 MB)
Collecting numpy>=1.14.5
  Using cached numpy-1.19.1-cp37-cp37m-manylinux2010_x86_64.whl (14.5 MB)
Installing collected packages: numpy, opencv-python
Successfully installed numpy-1.19.1 opencv-python-4.4.0.42
bash-4.2# python3.7
Python 3.7.8 (default, Jul 24 2020, 20:26:49) 
[GCC 7.3.1 20180712 (Red Hat 7.3.1-9)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib64/python3.7/site-packages/cv2/__init__.py", line 5, in <module>
    from .cv2 import *
ImportError: libGL.so.1: cannot open shared object file: No such file or directory

如何找出本地计算机上的正确依赖项?

Update

我让它与下面的版本一起工作,但知道如何在本地测试它仍然很有趣。

¹ 具体来说,我想要以下软件包:

opencv-python==3.4.3.18
scipy==1.4.1
scikit-learn==0.22.2.post1

这里的问题是,当安装 opencv 时,它的依赖项不会安装到您的-t目标位置。它们将安装到默认的 pip 安装位置<somewhere>/site-packages/在 Docker 镜像中。

因此,当您最终压缩目标位置时,您将丢失所有依赖项。我会通过以下方式解决这个问题not安装 opencv 时向 pip 提供目标。像安装任何其他软件包一样安装它。

从 Docker 镜像调用中python -m site --user-site获取 pip 安装位置。

修改 Docker 命令以在安装 opencv 后压缩整个目录,然后将其用于 Lambda 的压缩。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 lambda 层中本地调试依赖项? 的相关文章

随机推荐

  • 如何在导航周围创建径向渐变?

    看到围绕导航中心流动的径向渐变了吗 假设我做了一个div那就是导航 我将如何创建如图所示的渐变 注 看背景behind菜单 如果你谈论导航后面的浅棕色光芒 你可以使用 CSS3 来做到这一点 http jsfiddle net Jg8ZC
  • SignalR 自托管 Windows 服务,监听消息

    我正在尝试构建一个自托管 SignalR 的 Windows 服务 我已阅读过诸如此类的教程SignalR 在 ASP Net 上自托管 我注意到 至少看起来 它们是基于广播消息的 并且似乎找不到任何与聆听相关的内容 我需要收听服务内部的消
  • 为字符串创建距离矩阵

    我想加快以下代码的速度 有人能好心地提出一些建议吗 library dplyr library fuzzywuzzyR set seed 42 rm list ls options scipen 999 init FuzzMatcher n
  • Spring Boot 中的 Hystrix 仪表板问题

    我是 Hystrix 仪表板的新手 我已经用 Hystrix 编写了示例应用程序 我想查看 Hystrix 图表 命令指标流 但我收到以下错误 Circuit Unable to connect to Command Metric Stre
  • PDF 中的 JavaScript?

    我制作了一个可编辑的 PDF 供学生索取成绩单 现在 我想限制输入 例如 我只想要他们的 ID 号为数字 并且我只想要姓名字段中的字母 无特殊字符 等 此外 还有一个名为 最后就读年份 的输入 其中输入用户的最后一个学年上大学了 如果输入的
  • 从元素最小值的元组列表中提取元组的优雅方法

    我有一个元组列表 我希望从中得到索引处最小值的元组1 例如 如果我的列表如下 a a 2 ee 3 mm 4 x 1 我希望返回的元组是 x 1 目前我正在使用sorted函数得到这样的结果 min sorted a key lambda
  • 查找图中的连通分量[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 如果我有一个无向图 作为顶点列表实现 如何找到它的连通分量 如何使用快速联盟 使用深度优先搜索 DFS 将所有单独的连接组件标记为已访问 dfs node u for each
  • 删除字符串中连续重复的单词

    我正在尝试编写一个函数来删除字符串中连续的重复单词 保留正则表达式找到的任何匹配项至关重要 换句话说 一只非常非常非常肮脏的狗 应该成为 一只非常脏的狗 我有一个似乎运行良好的正则表达式 基于这篇文章 b S b s 1 但是我不确定如何使
  • 如何从javascript中的值获取对象值的路径

    Example var someObject part1 name Part 1 txt example part2 name Part 2 size 15 qty 60 part3 name Part 3A size 10 qty 20
  • 使用 find 和 iconv 更改文件名

    我尝试使用以下脚本更改文件名 find dir type f exec mv echo iconv f UTF8 t ASCII TRANSLIT 为什么不起作用 我的意思是 当我有一个带有 这样的字符的文件时 它应该将其转换为 a ech
  • 如何在ListView中处理多个倒计时器?

    我有一个列表视图 带有自定义列表适配器 我需要在每一行上显示倒计时 例如 如果我的列表包含 4 个项目 则我将有 4 行 此时 我需要处理 4 个不同的倒计时 每行一个 因为时间不同 到目前为止 我按以下方式处理它 在自定义列表适配器中 在
  • 使用Python保留关键字作为变量名[重复]

    这个问题在这里已经有答案了 我正在尝试使用网络服务发送短信 这是网络服务文档的建议 response client service SendSMS fromNum 09999999 toNum 0666666666666 messageCo
  • Websockets 使用 asio c++ 库作为服务器,使用 javascript 作为客户端

    我使用 C 编写了服务器代码asio图书馆 我知道服务器代码可以工作 因为我使用同样用 C 编写并使用的客户端对其进行了测试asio 问题是 使用以下客户端 javascript 代码 连接不会被接受 我立即看到消息框Connection
  • TensorFlow:评估恢复图

    我正在尝试从检查点恢复图表 检查点是由创建的tf Supervisor 两者都有meta文件和检查点 我试图实现的是从单独的应用程序加载此图以运行某些操作 即重用现有模型 我按如下方式执行此操作 如此处所述 https www tensor
  • 在 ggplot2 中的 aes() 函数中使用颜色

    我是新来的ggplot2 我想了解如何使用ggplot 我正在读 Wickham 的书 但仍在尝试如何使用aes 功能 在相关的线程中 我们讨论了我们应该尽量避免在内部使用变量aes 即 不要将常量放入aes 仅将映射映射到实际数据列 我的
  • 使用 GCM Token 在 FCM 中推送消息

    目前我们有使用旧 GCM 实现的设备 有谁知道在使用 firebase 云消息 API 发送推送消息时是否可以使用旧的现有 GCM 令牌 或者应用程序是否需要新的 FCM sdk 实现 有谁知道在使用 firebase 云消息 API 发送
  • 在同一个应用程序中切换 Google Maps SDK 和 Mapkit 会导致崩溃

    我创建了一个非常简单的应用程序 它使用 MapKit 和 GoogleMaps 框架 并尝试在两个地图之间切换 我正在使用 ARC ios 6 1 和 Google Maps SDK for iOS 版本 1 1 1 2311 几次切换后
  • Schema.org 的丰富片段通过 JSON+LD 实现,但未被爬虫抓取

    我们已经为产品类型实现了丰富的摘要 也为组织类型实现了丰富的摘要 两种类型的属性都传递到 JSON LD 类型脚本包装器中 请在此处查看标记和验证 结构化数据测试工具 Google 选择组织类型 这是可以验证的 因为我们实际上更改了组织卡上
  • 处理加速度计数据

    我想知道是否有一些库 算法 技术可以帮助从加速度计数据 从任何智能手机中提取 中提取用户上下文 步行 站立 例如 我会在一段时间内每 5 秒收集一次加速度计数据 然后识别用户上下文 例如 前 5 分钟 用户在走路 然后用户站立一分钟 然后他
  • 如何在 lambda 层中本地调试依赖项?

    我正在从 dockerfile 创建一个 lambda 层 它将 python 包安装到一个目录并压缩结果 FROM amazonlinux WORKDIR RUN yum update y Install Python 3 7 RUN y