在Amazon Lambda中使用moviepy,scipy和numpy


68

我想使用AWS Lambda功能生成视频。

我已按照此处此处的说明进行操作。

现在,我可以通过以下过程来构建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/*

第2步

我将生成的tarball压缩到笔记本电脑中。然后运行此脚本以构建一个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刚在解压缩之后添加了,但这并没有改变结果。
rouk1

为了消除源代码或文件名的问题,您是否可以对一个琐碎的项目进行重新测试,该项目有一个仅导入numpy的简单源文件,是否将简单打印输出到stdout,而没有其他操作?
jarmod

1
有关C扩展以及从中加载numpy的建议,请参见stackoverflow.com/questions/14570011/…。希望这可以帮助。
jarmod

这是一个很好的深度教程:serverlesscode.com/post/deploy-scikitlearn-on-lamba
Rentrop

Answers:


59

我也在跟踪您的第一个链接,并设法通过Lambda函数(在Windows上)导入numpypandas

  1. 使用64位Amazon Linux AMI 2015.09.1启动了一个(免费)t2.micro EC2实例,并使用Putty进行SSH插入
  2. 尝试了与您使用的命令相同的命令,以及亚马逊文章推荐的命令

    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
    
  3. 创建了虚拟环境

    virtualenv ~/env
    source ~/env/bin/activate
    
  4. 安装了软件包

    sudo ~/env/bin/pip2.7 install numpy
    sudo ~/env/bin/pip2.7 install pandas
    
  5. 然后,我使用WinSCP登录并从中下载了所有内容(_markerlib,pip *,pkg_resources,setuptools *和easyinstall *除外)/home/ec2-user/env/lib/python2.7/dist-packages,以及所有来自/home/ec2-user/env/lib64/python2.7/site-packagesEC2实例的内容。

  6. 我将所有这些文件夹和文件以及包含Lambda函数的.py文件放入一个zip文件中。 复制的所有文件的插图

  7. 因为此.zip大于10 MB,所以我创建了一个S3存储桶来存储文件。我从那里复制了文件的链接,并粘贴到Lambda函数的“从Amazon S3上传.ZIP”中。

  8. 可以关闭EC2实例,不再需要它。

这样,我可以导入numpy和pandas。我不熟悉moviepy,但是scipy可能已经很棘手,因为Lambda将未压缩的部署程序包大小限制为262144 000字节。恐怕numpy和scipy在一起已经超过了。


1
安装matplotlibsudo yum -y install freetype-devel sudo yum -y install libpng-devel sudo ~/env/bin/pip2.7 --no-cache-dir install matplotlib
Attila Tanyi

matplotlib还需要下载cyclerpyparsing/home/ec2-user/env/lib/python2.7/site-packages
阿提拉(Attila Tanyi)2016年

1
在此处查看当前的Amazon AMI:docs.aws.amazon.com/lambda/latest/dg/…–
Rentrop,

1
Lambda就是要确保我们不必处理服务器。我们只是担心我们要提供的服务,对吗?然后,通过这样做,我们担心服务器,实际上我们并不是无服务器的。另外,如果主机由于某种原因掉线了会怎样?Lambda是否会提出另一个节点?该节点是否将安装这些依赖项?
加内什·萨特皮特

1
@Ganesh Satpute-要清楚,上面的过程只是为了脚本中包含所需的库。您不必担心服务器的管理,但是您需要考虑它将采用哪种架构,因为numpy使用为特定架构构建的文件。仅在这里需要EC2服务器才能构建这些文件,然后将它们放入.zip,之后就不需要了。Lambda的工作方式是将.zip内容引导到正在运行的计算机上,并在需要时运行它,如果不需要,则将其删除。您不需要知道哪台机器。
阿提拉(Attila Tanyi)

28

在此线程中的所有帖子的帮助下,这里是记录的解决方案:

要使其正常工作,您需要:

  1. EC2用至少2GO RAM启动一个实例(以便能够编译NumPySciPy

  2. 安装所需的依赖项

    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
    
  3. 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
  4. 从您的EC2实例获取所有必需的共享库:

    • libatlas.so.3
    • libf77blas.so.3
    • liblapack.so.3
    • libptf77blas.so.3
    • libcblas.so.3
    • libgfortran.so.3
    • libptcblas.so.3
    • libquadmath.so.0
  5. 将它们放在lib文件夹的子stack文件夹中

  6. imageio是的依赖项moviepy,您需要下载其依赖项的一些二进制版本:libfreeimageffmpeg;他们可以在这里找到。将它们放在堆栈文件夹的根目录并重命名libfreeimage-3.16.0-linux64.solibfreeimage.so

  7. 您现在应该拥有一个stack包含以下内容的文件夹:

    • 根目录下的所有python依赖项
    • lib子文件夹中的所有共享库
    • ffmpeg 根目录二进制
    • libfreeimage.so 根源
  8. 压缩此文件夹: zip -r9 stack.zip . -x ".*" -x "*/.*"

  9. 使用以下内容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)
    
  10. 写一个movie_maker.py依赖于脚本moviepynumpy...

  11. 将这些脚本添加到您的stack.zip文件中 zip -r9 lambda.zip *.py

  12. 上载zipS3并将其用作您的源lambda

您也可以在stack.zip 此处下载。


您如何找到所需的共享库列表?任何命令吗?
dejavu


4
@ rouk1这项工作如何进行?site-packages目录的内容总大小为〜250mb,高于lambda的限制
pratsJ

zip命令排除通配符“。*”。在我的情况下,此.libs目录省略了必需的共享库。
丹尼斯的威胁

8

此处的帖子可帮助我找到一种使用库文件静态编译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。
ZZzzZZzz

我使用了相同的site.cfg文件
ZZzzZZzz

@Zzz。我以前遇到过这个问题。您需要删除现有的NumPy安装文件夹并重新启动编译过程。希望它能起作用!
Vito Limandibhrata,2016年

我已经尝试了很多次。我没有安装它,但是我检查了构建。它根本没有使用运行时库目录。您能否也将libblas.so.3也包括在您的构建中。谢谢。@Vito Limandibhrata
ZZzzZZzz

在我的情况下,还需要.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。
sangheestyle

6

目前,另一种非常简单的方法是使用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)运行这些可执行文件?
汤姆(Tom)

6

截至2017年,NumPy和SciPy的轮子可以在Lambda上运行(软件包包括pre-compiledlibgfortranlibopenblas)。据我所知,MoviePy是一个纯Python模块,因此基本上可以做到:

pip2 install -t lambda moviepy scipy

然后将您的处理程序复制到lambda目录中并进行压缩。除此以外,您极有可能超过50/250 MB的大小限制。有几件事可以帮助您:

  • 删除.pycs,文档,测试和其他不必要的部分;
  • 保留NumPy和SciPy通用库的单个副本;
  • 剥离非必要部分的库,例如调试符号;
  • 使用更高的设置压缩档案。

这是一个自动化上述几点的示例脚本


1
“ NumPy和SciPy有轮子”是什么意思?我看到有一个numpy-1.14.0.dist-info目录,其中包含WHEEL文件。我按照这里的说明进行操作,但仍然Unable to import module 'solution': Missing required dependencies ['numpy']出现错误。
azizj1

3

从2018年开始,在AWS EC2上的Python3中安装外部模块的步骤如下:

  1. 在Amazon Linux AMI 201709上启动EC2。

  2. 使用私有和公钥使用腻子ssh并成为超级用户。

  3. 安装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
    
  4. 使用winscp将站点包和dist包下的文件复制到本地机器中。

    要找到实际位置,请使用grep命令-

      grep -r dist-packages *. 
    

这些软件包可以同时位于lib和lib64中。

  1. Site和dist软件包将位于以下位置:

    /tmp/my_python_lib/lib64/python3.6,
    /tmp/my_python_lib/lib/python3.6
    
  2. 将这些软件包与脚本文件一起压缩并上传到可以在lambda中访问的S3中,而不是压缩根文件夹,您必须选择所有文件并将其压缩或发送到压缩文件夹中。

其他提示:

  1. 如果要将所有软件包安装在一个目录下,则可以使用以下命令:

     pip install --upgrade --target=/tmp/my_python_lib/lib/python3.6/dist-packages pandas
    

3

截至2018年8月,最简单的方法可能是启动新的AWS Cloud9环境。然后在环境中创建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

@JohnAndrews我认为您不需要设置ec2。还是说Cloud9正在运行的ec2?
karoli

不确定,我放弃了,转而使用Google Cloud Functions。无法解释它有多容易(实际上是在30分钟内完成上述操作,就可以完成设置),而文档却要好得多。
JohnAndrews

@karoli表示您的lambda中有venv文件夹吗?我以为我们通常不检查venv文件夹。
2015年

1
@ Jun711熊猫似乎工作正常,并且对numpy有依赖性。
karoli

2

2018年11月。嗨,朋友,这篇文章对我非常有帮助。但是,到目前为止,答案还不是很自动化。我在这里https://gist.github.com/steinwaywhw/6a6a25d594cc07146c60af943f74c16f编写了Python脚本和教程,以使用pipvirtualenv在EC2上自动创建编译的Python包。一切都是Python(Boto3),bash脚本,Web控制台,no awscli

除了自动化以外,我认为还有另一项改进。我下载了EC2保留其文件夹结构,而不是合并整个Python的虚拟环境lib,并lib64封装在一起。我从不理解合并这两个文件夹的预期含义。如果某些软件包优先于其他软件包,该怎么办?此外,伪造一个官方虚拟环境绝对不是比自己动手更安全的方法。

为了使下载的虚拟环境正常工作,Lambda函数的源代码添加了一些样板代码以使用来更新Python搜索路径sys.pathsys.pathPython虚拟环境的意图可以通过以下方式找到

  • 在您自己的计算机上,创建一个虚拟环境并激活它。
  • 在这个虚拟环境中运行Python脚本,做print(sys.path)import sys。您可以从此处开始并根据需要进行修改。

下面添加了一个Lambda函数的样板代码片段,以便numpy从打包的虚拟环境中加载和加载其他程序包。就我而言,我加载pandas_datareadernumpy

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/python{version}/site-packages',
               f'{workdir}/venv/lib64/python{version}/lib-dynload',
               f'{workdir}/venv/lib64/python{version}/dist-packages',
               f'{workdir}/venv/lib/python{version}/dist-packages',
               f'{workdir}/venv/lib/python{version}/site-packages']
sys.path = additionals + sys.path

import pandas_datareader as pdr

1

我可以确认@ attila-tanyi发布的步骤在Amazon Linux下可以正常工作。我只想补充一点,因为默认存储库中有可用的Amazon Linux docker容器,所以无需使用EC2。

docker pull amazonlinux && docker run -it amazonlinux
# Follow @attila-tanyi steps
# Note - sudo is not necessary here

我使用嵌入在应用程序中的Dockerfile构建并部署到Lambda。


0

我喜欢@Vito Limandibhrata的答案,但我认为用numpy == 1.11.1中的runtime_library_dirs构建numpy是不够的。如果有人认为site-cfg被忽略,请执行以下操作:

cp /usr/lib64/atlas-sse3/*.a /var/task/lib/

构建numpy需要atlas-sse3下的* .a文件。另外,您可能需要运行以下命令:

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文件。这是非常简单的方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.