我试图在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上运行时会出现此问题。
我遇到了同样的问题。
[拉斐尔·布劳德(RaphaëlBraud)发布的链接很有帮助,所以它也很有用:https: //nervous.io/python/aws/lambda/2016/02/17/scipy-pandas- lambda/
使用这两个链接,我能够成功导入lxml和其他必需的软件包。这是我遵循的步骤:
运行以下脚本以累积依赖关系:
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文件的结构如下所示:
deps ├── handler.py ├── worker.py ├── local │ └── lib │ ├── libanl.so │ ├── libBrokenLocale.so | .... ├── lxml │ ├── builder.py │ ├── builder.pyc | .... ├── <other python packages>
希望这可以帮助!