AWS Lambda不导入LXML

发布于 2021-01-29 15:59:30

我试图在AWS Lambda中使用LXML模块,但没有运气。我使用以下命令下载了LXML:

pip install lxml -t folder

要将其下载到我的lambda函数部署包中。与其他所有lambda函数一样,我压缩了lambda函数的内容,并将其上传到AWS Lambda。

但是,无论我尝试什么,在运行该函数时都会收到此错误:

Unable to import module 'handler': /var/task/lxml/etree.so: undefined symbol: PyFPE_jbuf

在本地运行时,没有任何问题,只是在Lambda上运行时会出现此问题。

关注者
0
被浏览
51
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    我遇到了同样的问题。

    拉斐尔·布劳德(RaphaëlBraud)发布的链接很有帮助,所以它也很有用:https//nervous.io/python/aws/lambda/2016/02/17/scipy-pandas-
    lambda/

    使用这两个链接,我能够成功导入lxml和其他必需的软件包。这是我遵循的步骤:

    • 使用Amazon Linux AMI启动EC2计算机
    • 运行以下脚本以累积依赖关系:

      set -e -o pipefail
      

      sudo yum -y upgrade
      sudo yum -y install gcc python-devel libxml2-devel libxslt-devel

      virtualenv ~/env && cd ~/env && source bin/activate
      pip install lxml
      for dir in lib64/python2.7/site-packages \
      lib/python2.7/site-packages
      do
      if [ -d $dir ] ; then
      pushd $dir; zip -r ~/deps.zip .; popd
      fi
      done
      mkdir -p local/lib
      cp /usr/lib64/ #list of required .so files
      local/lib/
      zip -r ~/deps.zip local/lib

    • 按照链接中的指定创建处理程序和辅助文件。样本文件内容:

    handler.py

    import os
    import subprocess
    
    
    libdir = os.path.join(os.getcwd(), 'local', 'lib')
    
    def handler(event, context):
        command = 'LD_LIBRARY_PATH={} python worker.py '.format(libdir)
        output = subprocess.check_output(command, shell=True)
    
        print output
    
        return
    

    worker.py:

    import lxml
    
    def sample_function( input_string = None):
        return "lxml import successful!"
    
    if __name__ == "__main__":
        result = sample_function()
        print result
    
    • 将处理程序和工作程序添加到zip文件中。

    完成上述步骤后,zip文件的结构如下所示:

    deps 
    ├── handler.py
    ├── worker.py 
    ├── local
    │   └── lib
    │       ├── libanl.so
    │       ├── libBrokenLocale.so
    |       ....
    ├── lxml
    │   ├── builder.py
    │   ├── builder.pyc
    |       ....
    ├── <other python packages>
    
    • 确保在创建lambda函数时指定了正确的处理程序名称。在上面的示例中,它将是“ handler.handler”

    希望这可以帮助!



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看