在 amazon lambda 中使用 moviepy、scipy 和 numpy
Posted
技术标签:
【中文标题】在 amazon lambda 中使用 moviepy、scipy 和 numpy【英文标题】:Using moviepy, scipy and numpy in amazon lambda 【发布时间】:2016-04-17 10:20:18 【问题描述】:我想使用AWS Lambda
功能生成视频。
我已按照 here 和 here 的说明进行操作。
我现在有以下过程来构建我的Lambda
函数:
步骤 1
触发Amazon Linux EC2
实例并在其上以root 身份运行:
#! /usr/bin/env bash
# Install the SciPy stack on Amazon Linux and prepare it for AWS Lambda
yum -y update
yum -y groupinstall "Development Tools"
yum -y install blas --enablerepo=epel
yum -y install lapack --enablerepo=epel
yum -y install atlas-sse3-devel --enablerepo=epel
yum -y install Cython --enablerepo=epel
yum -y install python27
yum -y install python27-numpy.x86_64
yum -y install python27-numpy-f2py.x86_64
yum -y install python27-scipy.x86_64
/usr/local/bin/pip install --upgrade pip
mkdir -p /home/ec2-user/stack
/usr/local/bin/pip install moviepy -t /home/ec2-user/stack
cp -R /usr/lib64/python2.7/dist-packages/numpy /home/ec2-user/stack/numpy
cp -R /usr/lib64/python2.7/dist-packages/scipy /home/ec2-user/stack/scipy
tar -czvf stack.tgz /home/ec2-user/stack/*
第二步
我将生成的 tarball scp 到我的笔记本电脑。然后运行此脚本来构建一个 zip 存档。
#! /usr/bin/env bash
mkdir tmp
rm lambda.zip
tar -xzf stack.tgz -C tmp
zip -9 lambda.zip process_movie.py
zip -r9 lambda.zip *.ttf
cd tmp/home/ec2-user/stack/
zip -r9 ../../../../lambda.zip *
process_movie.py
脚本目前只是测试堆栈是否正常:
def make_movie(event, context):
import os
print(os.listdir('.'))
print(os.listdir('numpy'))
try:
import scipy
except ImportError:
print('can not import scipy')
try:
import numpy
except ImportError:
print('can not import numpy')
try:
import moviepy
except ImportError:
print('can not import moviepy')
第三步
然后我将生成的存档上传到 S3,作为我的 lambda
函数的来源。
当我测试函数时,我得到以下callstack
:
START RequestId: 36c62b93-b94f-11e5-9da7-83f24fc4b7ca Version: $LATEST
['tqdm', 'imageio-1.4.egg-info', 'decorator.pyc', 'process_movie.py', 'decorator-4.0.6.dist-info', 'imageio', 'moviepy', 'tqdm-3.4.0.dist-info', 'scipy', 'numpy', 'OpenSans-Regular.ttf', 'decorator.py', 'moviepy-0.2.2.11.egg-info']
['add_newdocs.pyo', 'numarray', '__init__.py', '__config__.pyc', '_import_tools.py', 'setup.pyo', '_import_tools.pyc', 'doc', 'setupscons.py', '__init__.pyc', 'setup.py', 'version.py', 'add_newdocs.py', 'random', 'dual.pyo', 'version.pyo', 'ctypeslib.pyc', 'version.pyc', 'testing', 'dual.pyc', 'polynomial', '__config__.pyo', 'f2py', 'core', 'linalg', 'distutils', 'matlib.pyo', 'tests', 'matlib.pyc', 'setupscons.pyc', 'setup.pyc', 'ctypeslib.py', 'numpy', '__config__.py', 'matrixlib', 'dual.py', 'lib', 'ma', '_import_tools.pyo', 'ctypeslib.pyo', 'add_newdocs.pyc', 'fft', 'matlib.py', 'setupscons.pyo', '__init__.pyo', 'oldnumeric', 'compat']
can not import scipy
'module' object has no attribute 'core': AttributeError
Traceback (most recent call last):
File "/var/task/process_movie.py", line 91, in make_movie
import numpy
File "/var/task/numpy/__init__.py", line 122, in <module>
from numpy.__config__ import show as show_config
File "/var/task/numpy/numpy/__init__.py", line 137, in <module>
import add_newdocs
File "/var/task/numpy/numpy/add_newdocs.py", line 9, in <module>
from numpy.lib import add_newdoc
File "/var/task/numpy/lib/__init__.py", line 13, in <module>
from polynomial import *
File "/var/task/numpy/lib/polynomial.py", line 11, in <module>
import numpy.core.numeric as NX
AttributeError: 'module' object has no attribute 'core'
END RequestId: 36c62b93-b94f-11e5-9da7-83f24fc4b7ca
REPORT RequestId: 36c62b93-b94f-11e5-9da7-83f24fc4b7ca Duration: 112.49 ms Billed Duration: 200 ms Memory Size: 1536 MB Max Memory Used: 14 MB
我不明白为什么 python 找不到文件夹结构中存在的核心目录。
编辑:
按照@jarmod 的建议,我将lambda
函数缩减为:
def make_movie(event, context):
print('running make movie')
import numpy
我现在遇到以下错误:
START RequestId: 6abd7ef6-b9de-11e5-8aee-918ac0a06113 Version: $LATEST
running make movie
Error importing numpy: you should not try to import numpy from
its source directory; please exit the numpy source tree, and relaunch
your python intepreter from there.: ImportError
Traceback (most recent call last):
File "/var/task/process_movie.py", line 3, in make_movie
import numpy
File "/var/task/numpy/__init__.py", line 127, in <module>
raise ImportError(msg)
ImportError: Error importing numpy: you should not try to import numpy from
its source directory; please exit the numpy source tree, and relaunch
your python intepreter from there.
END RequestId: 6abd7ef6-b9de-11e5-8aee-918ac0a06113
REPORT RequestId: 6abd7ef6-b9de-11e5-8aee-918ac0a06113 Duration: 105.95 ms Billed Duration: 200 ms Memory Size: 1536 MB Max Memory Used: 14 MB
【问题讨论】:
您能否尝试在上传之前删除任何*.pyc
文件。
@sushant 我在解压缩之后添加了find tmp -name '*.pyc' -type f -delete
,但这并没有改变结果。
为了消除源文件名或文件名的问题,你能不能用一个简单的项目重新测试,它有一个简单的源文件,只导入 numpy,简单地打印到标准输出,什么都不做?跨度>
请参阅***.com/questions/14570011/… 以获取有关 C 扩展以及从何处加载 numpy 的建议。希望这会有所帮助。
这是一个很好的深度教程:serverlesscode.com/post/deploy-scikitlearn-on-lamba
【参考方案1】:
我也关注了您的第一个链接,并以这种方式(在 Windows 上)在 Lambda 函数中导入了 numpy 和 pandas:
-
使用 64 位 Amazon Linux AMI 2015.09.1 启动(免费层)t2.micro EC2 instance 并使用 Putty 进行 SSH 访问。
尝试了您使用的相同命令以及亚马逊文章推荐的命令:
sudo yum -y update
sudo yum -y upgrade
sudo yum -y groupinstall "Development Tools"
sudo yum -y install blas --enablerepo=epel
sudo yum -y install lapack --enablerepo=epel
sudo yum -y install Cython --enablerepo=epel
sudo yum install python27-devel python27-pip gcc
创建了虚拟环境:
virtualenv ~/env
source ~/env/bin/activate
安装了包:
sudo ~/env/bin/pip2.7 install numpy
sudo ~/env/bin/pip2.7 install pandas
然后,使用 WinSCP,我登录并下载来自/home/ec2-user/env/lib/python2.7/dist-packages
的所有内容(除了_markerlib、pip*、pkg_resources、setuptools* 和easyinstall*),以及来自/home/ec2-user/env/lib64/python2.7/site-packages
的所有内容来自 EC2 实例。
我将所有这些文件夹和文件与包含 Lambda 函数的 .py 文件一起放入一个 zip 中。 illustration of all files copied
因为这个 .zip 大于 10 MB,所以我创建了一个 S3 存储桶 来存储文件。我从那里复制了文件的链接,并粘贴在 Lambda 函数的“从 Amazon S3 上传 .ZIP”处。
EC2 实例可以关闭,不再需要了。
有了这个,我可以导入 numpy 和 pandas。我不熟悉 moviepy,但 scipy 可能已经很棘手,因为 Lambda 的解压缩部署包大小为 262 144 000 字节的 limit。恐怕 numpy 和 scipy 一起已经结束了。
【讨论】:
安装 matplotlib:sudo yum -y install freetype-devel
sudo yum -y install libpng-devel
sudo ~/env/bin/pip2.7 --no-cache-dir install matplotlib
matplotlib 还需要从/home/ec2-user/env/lib/python2.7/site-packages
下载cycler
和pyparsing
。
在此处查看当前的 Amazon AMI:docs.aws.amazon.com/lambda/latest/dg/…
Lambda 旨在确保我们不必与服务器打交道。我们只是担心我们试图利用的服务,对吧?然后通过这样做,我们担心服务器,我们实际上并不是无服务器的。另外,如果由于某种原因主机宕机了怎么办? Lambda 会带来另一个节点吗?该节点会安装这些依赖项吗?
@Ganesh Satpute - 需要明确的是,上述过程仅适用于在您的脚本中包含所需的库。您不必担心服务器的管理,但您需要考虑它将是什么架构,因为 numpy 使用为特定架构构建的文件。这里只需要 EC2 服务器来构建这些文件,然后将它们放入 .zip 中,之后就不需要了。 Lambda 的工作方式是将您的 .zip 内容启动到正在运行的机器上,并在需要时运行它,如果不是,则将其删除。你不需要知道是哪台机器。【参考方案2】:
在此线程中的所有帖子的帮助下,这里是记录的解决方案:
要使其正常工作,您需要:
启动一个至少有 2GO RAM 的EC2
实例(以便能够编译NumPy
和SciPy
)
安装所需的依赖项
sudo yum -y update
sudo yum -y upgrade
sudo yum -y groupinstall "Development Tools"
sudo yum -y install blas --enablerepo=epel
sudo yum -y install lapack --enablerepo=epel
sudo yum -y install Cython --enablerepo=epel
sudo yum install python27-devel python27-pip gcc
virtualenv ~/env
source ~/env/bin/activate
pip install scipy
pip install numpy
pip install moviepy
将stack
文件夹中目录的所有内容(_markerlib、pip*、pkg_resources、setuptools* 和 easyinstall* 除外)复制到您的语言环境:
home/ec2-user/env/lib/python2.7/dist-packages
home/ec2-user/env/lib64/python2.7/dist-packages
从EC2
instance 处获取所有必需的共享库:
libatlas.so.3
libf77blas.so.3
liblapack.so.3
libptf77blas.so.3
libcblas.so.3
libgfortran.so.3
libptcblas.so.3
libquadmath.so.0
将它们放在stack
文件夹的lib
子文件夹中
imageio
是moviepy
的依赖项,您需要下载其依赖项的一些二进制版本:libfreeimage
和ffmpeg
;他们可以找到here。将它们放在你的堆栈文件夹的根目录下,并将libfreeimage-3.16.0-linux64.so
重命名为libfreeimage.so
您现在应该有一个 stack
文件夹,其中包含:
lib
子文件夹中的所有共享库
ffmpeg
根目录下的二进制文件
libfreeimage.so
根目录
压缩此文件夹:zip -r9 stack.zip . -x ".*" -x "*/.*"
使用以下lambda_function.py
作为lambda
的入口点
from __future__ import print_function
import os
import subprocess
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
LIB_DIR = os.path.join(SCRIPT_DIR, 'lib')
FFMPEG_BINARY = os.path.join(SCRIPT_DIR, 'ffmpeg')
def lambda_handler(event, context):
command = 'LD_LIBRARY_PATH= IMAGEIO_FFMPEG_EXE= python movie_maker.py'.format(
LIB_DIR,
FFMPEG_BINARY,
)
try:
output = subprocess.check_output(command, shell=True)
print(output)
except subprocess.CalledProcessError as e:
print(e.output)
编写一个依赖于moviepy
、numpy
、...的movie_maker.py
脚本
将这些添加到您的 stack.zip 文件中的脚本 zip -r9 lambda.zip *.py
将 zip 文件上传到 S3
并将其用作您的 lambda
的来源
您也可以下载stack.zip
here。
【讨论】:
您是如何找到所需的共享库列表的?有什么命令吗? 见***.com/questions/50159/… @rouk1 这是如何工作的? site-packages 目录内容的总大小约为 250mb,高于 lambda 的限制 zip 命令不包括通配符“.*”。在我的情况下,这省略了.libs
dir 以及所需的共享库。【参考方案3】:
这里的帖子帮助我找到一种方法来静态编译带有库文件的 NumPy,这些库文件可以包含在 AWS Lambda 部署包中。此解决方案不依赖于@rouk1 解决方案中的 LD_LIBRARY_PATH 值。
编译好的NumPy库可以从https://github.com/vitolimandibhrata/aws-lambda-numpy下载
这里是自定义编译 NumPy 的步骤
从头开始编译这个包的说明
使用 AWS Linux 准备一个新的 AWS EC 实例。
安装编译器依赖项
sudo yum -y install python-devel
sudo yum -y install gcc-c++
sudo yum -y install gcc-gfortran
sudo yum -y install libgfortran
安装 NumPy 依赖项
sudo yum -y install blas
sudo yum -y install lapack
sudo yum -y install atlas-sse3-devel
创建 /var/task/lib 以包含运行时库
mkdir -p /var/task/lib
/var/task 是您的代码将驻留在 AWS Lambda 中的根目录,因此我们需要将所需的库文件静态链接到一个众所周知的文件夹中,在本例中为 /var/task/lib
将以下库文件复制到/var/task/lib
cp /usr/lib64/atlas-sse3/liblapack.so.3 /var/task/lib/.
cp /usr/lib64/atlas-sse3/libptf77blas.so.3 /var/task/lib/.
cp /usr/lib64/atlas-sse3/libf77blas.so.3 /var/task/lib/.
cp /usr/lib64/atlas-sse3/libptcblas.so.3 /var/task/lib/.
cp /usr/lib64/atlas-sse3/libcblas.so.3 /var/task/lib/.
cp /usr/lib64/atlas-sse3/libatlas.so.3 /var/task/lib/.
cp /usr/lib64/atlas-sse3/libptf77blas.so.3 /var/task/lib/.
cp /usr/lib64/libgfortran.so.3 /var/task/lib/.
cp /usr/lib64/libquadmath.so.0 /var/task/lib/.
从http://sourceforge.net/projects/numpy/files/NumPy/获取最新的numpy源代码
转到 numpy 源代码文件夹,例如 numpy-1.10.4 使用以下条目创建一个 site.cfg 文件
[atlas]
libraries=lapack,f77blas,cblas,atlas
search_static_first=true
runtime_library_dirs = /var/task/lib
extra_link_args = -lgfortran -lquadmath
-lgfortran -lquadmath 标志需要静态链接 gfortran 和 quadmath 库与 runtime_library_dirs 中定义的文件
构建 NumPy
python setup.py build
安装 NumPy
python setup.py install
检查库是否链接到 /var/task/lib 中的文件
ldd $PYTHON_HOME/lib64/python2.7/site-packages/numpy/linalg/lapack_lite.so
你应该看到
linux-vdso.so.1 => (0x00007ffe0dd2d000)
liblapack.so.3 => /var/task/lib/liblapack.so.3 (0x00007ffad6be5000)
libptf77blas.so.3 => /var/task/lib/libptf77blas.so.3 (0x00007ffad69c7000)
libptcblas.so.3 => /var/task/lib/libptcblas.so.3 (0x00007ffad67a7000)
libatlas.so.3 => /var/task/lib/libatlas.so.3 (0x00007ffad6174000)
libf77blas.so.3 => /var/task/lib/libf77blas.so.3 (0x00007ffad5f56000)
libcblas.so.3 => /var/task/lib/libcblas.so.3 (0x00007ffad5d36000)
libpython2.7.so.1.0 => /usr/lib64/libpython2.7.so.1.0 (0x00007ffad596d000)
libgfortran.so.3 => /var/task/lib/libgfortran.so.3 (0x00007ffad5654000)
libm.so.6 => /lib64/libm.so.6 (0x00007ffad5352000)
libquadmath.so.0 => /var/task/lib/libquadmath.so.0 (0x00007ffad5117000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007ffad4f00000)
libc.so.6 => /lib64/libc.so.6 (0x00007ffad4b3e000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ffad4922000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007ffad471d000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007ffad451a000)
/lib64/ld-linux-x86-64.so.2 (0x000055cfc3ab8000)
【讨论】:
我试过这个。但是,我看到的是 liblapack.so.3 => /usr/lib64/liblapack.so.3 而不是 liblapack.so.3 => /var/task/lib/liblapack.so.3。 我用过同一个site.cfg文件 @Zzz。我以前遇到过这个问题。您需要删除现有的 NumPy 安装文件夹并重新启动编译过程。希望它有效! 我试过很多次了。我还没有安装它,但我检查了构建。它根本不使用运行时库目录。您能否将 libblas.so.3 也包含在您的构建中。谢谢。 @Vito Limandibhrata 在我的情况下,还需要 .a 文件来为 runtime_library_dirs 构建 numpy,否则 site-cfg 将被忽略。只需要做cp /usr/lib64/atlas-sse3/.a /var/task/lib/。 (numpy==1.11.1) 另外,如果您认为 site-cfg 被忽略,只需运行 python setup.py config 以了解问题所在,然后您就可以看到发生了什么。提示,如果您使用 pip,只需创建 ~/.numpy-site.cfg 并将 [atlas] 部分放入其中然后使用 pip。【参考方案4】:现在可以使用的另一种非常简单的方法是使用 LambCI 模仿 Lambda 制作的出色 docker 容器进行构建:https://github.com/lambci/docker-lambda
lambci/lambda:build
容器类似于 AWS Lambda,但增加了一个基本完整的构建环境。要在其中启动 shell 会话:
docker run -v "$PWD":/var/task -it lambci/lambda:build bash
会话内部:
export share=/var/task
easy_install pip
pip install -t $share numpy
或者,使用 virtualenv:
export share=/var/task
export PS1="[\u@\h:\w]\$ " # required by virtualenv
easy_install pip
pip install virtualenv
# ... make the venv, install numpy, and copy it to $share
稍后您可以使用主 lambci/lambda 容器来测试您的构建。
【讨论】:
在 docker 中安装了 numpy 之后你会做什么?即如何让它在 lambda 上工作?是否也可以从另一个运行时(例如 node.js)运行这些可执行文件?【参考方案5】:截至 2017 年,NumPy 和 SciPy 拥有可在 Lambda 上运行的***(软件包包括预编译的 libgfortran
和 libopenblas
)。
据我所知,MoviePy 是一个纯 Python 模块,所以基本上你可以这样做:
pip2 install -t lambda moviepy scipy
然后将您的处理程序复制到lambda
目录并压缩它。除了,您很可能会超过 50/250 MB 的大小限制。有几件事可以提供帮助:
这是一个示例script,它自动完成了上述几点。
【讨论】:
“NumPy 和 SciPy 有***”是什么意思?我看到有一个 numpy-1.14.0.dist-info 目录,其中包含一个 WHEEL 文件。我按照here 的说明进行操作,但仍然收到Unable to import module 'solution': Missing required dependencies ['numpy']
错误。【参考方案6】:
截至 2018 年,在 AWS EC2 上的 Python3 中安装外部模块的步骤:
在 Amazon Linux AMI 201709 上启动 EC2。
ssh 与 putty 使用私钥和公钥并成为超级用户。
安装 Python 3 并创建虚拟环境,然后将其设为默认
yum install python36 python36-virtualenv python36-pip
virtualenv -p python3.6 /tmp/my_python_lib
source /tmp/my_python_lib/bin/activate
which python --to check which version s installed
pip3 install numpy
使用 winscp 将站点包和 dist 包下的文件复制到本地机器中。
要查找实际位置,请使用 grep 命令 ---
grep -r dist-packages *.
这些包可能在 lib 和 lib64 中。
Site 和 dist 包将位于以下位置:
/tmp/my_python_lib/lib64/python3.6,
/tmp/my_python_lib/lib/python3.6
将这些包与您的脚本文件一起压缩并上传到可以在 lambda 中访问的 S3。您必须选择所有文件并将其压缩或发送到压缩文件夹,而不是压缩根文件夹。
其他提示:
如果要将所有包安装在一个目录下,可以使用命令:
pip install --upgrade --target=/tmp/my_python_lib/lib/python3.6/dist-packages pandas
【讨论】:
【参考方案7】:截至 2018 年 8 月,可能最简单的方法是启动 new AWS Cloud9 environment。 然后在环境中创建一个 Lambda 函数。接下来在 Cloud9 命令行中运行:
cd YourApplicationName
/venv/bin/pip install scipy -t .
/venv/bin/pip install numpy -t .
/venv/bin/pip install moviepy -t .
现在我可以在 lambda_handler 函数中导入模块了。
【讨论】:
需要设置 ec2...我们想避免这种情况,只使用 Lambda @JohnAndrews 我认为您不需要设置 ec2。或者您是指运行 Cloud9 的 ec2? 不确定,我放弃并切换到 Google Cloud Functions。无法解释它有多容易(在 30 分钟内按字面意思设置您在上面尝试做的事情)而且文档要好得多。 @karoli 这是否意味着你的 lambda 中有 venv 文件夹?我以为我们通常不会检查 venv 文件夹。 @Jun711 Pandas 似乎工作正常,并且它依赖于 numpy。【参考方案8】:2018 年 11 月。嗨朋友们,这篇文章对我非常有帮助。然而,到目前为止,答案并不是很自动化。我在这里https://gist.github.com/steinwaywhw/6a6a25d594cc07146c60af943f74c16f 编写了一个Python 脚本和教程,以在EC2 上使用pip
和virtualenv
自动创建已编译的Python 包。一切都是 Python (Boto3),没有 bash 脚本,没有 Web 控制台,没有 awscli
。
除了自动化之外,还有另一个变化,我认为这是一种改进。我从 EC2 下载了整个 Python 虚拟环境,保留了它的文件夹结构,而不是将 lib
和 lib64
包合并在一起。我从来不明白合并这两个文件夹的预期含义。如果某些包覆盖其他包怎么办,对吗?此外,伪造官方虚拟环境并非比自己动手更安全。
为了使下载的虚拟环境正常工作,Lambda 函数的源代码添加了一些样板代码,以使用 sys.path
更新 Python 搜索路径。 Python虚拟环境的预期sys.path
可以通过
import sys
之后执行 print(sys.path)
。
您可以从那里开始并根据需要进行修改。
下面粘贴了为 Lambda 函数添加的样板代码的 sn-p,以便从我的打包虚拟环境中加载 numpy
和其他包。就我而言,我加载了依赖于numpy
的pandas_datareader
。
import os
import sys
# https://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html
workdir = os.getenv('LAMBDA_TASK_ROOT')
version = f'sys.version_info[0].sys.version_info[1]'
additionals = [f'workdir/venv/lib64/pythonversion/site-packages',
f'workdir/venv/lib64/pythonversion/lib-dynload',
f'workdir/venv/lib64/pythonversion/dist-packages',
f'workdir/venv/lib/pythonversion/dist-packages',
f'workdir/venv/lib/pythonversion/site-packages']
sys.path = additionals + sys.path
import pandas_datareader as pdr
【讨论】:
【参考方案9】:我可以确认@attila-tanyi 发布的步骤在 Amazon Linux 下正常工作。我只想补充一点,不需要使用 EC2,因为默认存储库中有一个可用的 Amazon Linux docker 容器。
docker pull amazonlinux && docker run -it amazonlinux
# Follow @attila-tanyi steps
# Note - sudo is not necessary here
我使用嵌入在我的应用程序中的 Dockerfile 来构建和部署到 Lambda。
【讨论】:
【参考方案10】:我喜欢@Vito Limandibhrata 的回答,但我认为在 numpy==1.11.1 中使用 runtime_library_dirs 构建 numpy 是不够的。如果有人认为 site-cfg 被忽略,请执行以下操作:
cp /usr/lib64/atlas-sse3/*.a /var/task/lib/
需要 atlas-sse3 下的 *.a 文件来构建 numpy。此外,您可能需要运行以下命令:
python setup.py config
检查 numpy 配置。如果需要更多内容,您将看到以下消息:
atlas_threads_info:
Setting PTATLAS=ATLAS libraries ptf77blas,ptcblas,atlas not found in /root/Envs/skl/lib
libraries lapack_atlas not found in /root/Envs/skl/lib
libraries ptf77blas,ptcblas,atlas not found in /usr/local/lib64
libraries lapack_atlas not found in /usr/local/lib64
libraries ptf77blas,ptcblas,atlas not found in /usr/local/lib
libraries lapack_atlas not found in /usr/local/lib
libraries lapack_atlas not found in /usr/lib64/atlas-sse3
<class 'numpy.distutils.system_info.atlas_threads_info'>
Setting PTATLAS=ATLAS
Setting PTATLAS=ATLAS
Setting PTATLAS=ATLAS
Setting PTATLAS=ATLAS
libraries lapack not found in ['/var/task/lib']
Runtime library lapack was not found. Ignoring
libraries f77blas not found in ['/var/task/lib']
Runtime library f77blas was not found. Ignoring
libraries cblas not found in ['/var/task/lib']
Runtime library cblas was not found. Ignoring
libraries atlas not found in ['/var/task/lib']
Runtime library atlas was not found. Ignoring
FOUND:
extra_link_args = ['-lgfortran -lquadmath']
define_macros = [('NO_ATLAS_INFO', -1)]
language = f77
libraries = ['lapack', 'ptf77blas', 'ptcblas', 'atlas', 'lapack', 'f77blas', 'cblas', 'atlas']
library_dirs = ['/usr/lib64/atlas-sse3']
include_dirs = ['/usr/include']
那么 site-cfg 将被忽略。
提示:如果使用 pip 构建带有 runtime_library_dirs 的 numpy,您最好创建 ~/.numpy-site.cfg
并添加以下内容:
[atlas]
libraries = lapack,f77blas,cblas,atlas
search_static_first = true
runtime_library_dirs = /var/task/lib
extra_link_args = -lgfortran -lquadmath
然后 numpy 识别 .numpy-site.cfg 文件。这是非常简单易行的方法。
【讨论】:
【参考方案11】:您可以在任何操作系统上使用 scipy、numpy、moviepy 和 pandas 为 lambda 创建 zip 文件。
https://pypi.org/project/scipy/#files
pypi 有适用于不同操作系统的***文件,您可以下载 manylinux whl 文件并解压缩。之后删除 dist-info 和 pyc 文件并压缩所有文件。 最终的 zip 文件可以上传到 S3 并转换为 lambda 层。
This教程有助于深入理解。
【讨论】:
以上是关于在 amazon lambda 中使用 moviepy、scipy 和 numpy的主要内容,如果未能解决你的问题,请参考以下文章
使用 lambda 函数 nodejs 从 Amazon Redshift 查询选择
Amazon S3 在另一个账户中触发另一个 Lambda 函数
python 如何在Amazon Lambda函数中运行报纸