&引用;无法加载本机模块';加密。密码。_raw_ecb';:尝试'_raw_ecb.cpython-38-x86_64-linux-gnu.so';在python 3.8上运行Lambda时
我正在尝试用python进行加密和描述,并尝试在lambda上运行它 我得到以下错误:&引用;无法加载本机模块';加密。密码。_raw_ecb';:尝试'_raw_ecb.cpython-38-x86_64-linux-gnu.so';在python 3.8上运行Lambda时,python,python-3.x,amazon-web-services,aws-lambda,Python,Python 3.x,Amazon Web Services,Aws Lambda,我正在尝试用python进行加密和描述,并尝试在lambda上运行它 我得到以下错误: { "errorMessage": "Cannot load native module 'Crypto.Cipher._raw_ecb': Trying '_raw_ecb.cpython-38-x86_64-linux-gnu.so': /var/task/Crypto/Util/../Cipher/_raw_ecb.cpython-38-x86_64-linux-gnu
{
"errorMessage": "Cannot load native module 'Crypto.Cipher._raw_ecb': Trying '_raw_ecb.cpython-38-x86_64-linux-gnu.so': /var/task/Crypto/Util/../Cipher/_raw_ecb.cpython-38-x86_64-linux-gnu.so: cannot open shared object file: No such file or directory, Trying '_raw_ecb.abi3.so': /var/task/Crypto/Util/../Cipher/_raw_ecb.abi3.so: cannot open shared object file: No such file or directory, Trying '_raw_ecb.so': /var/task/Crypto/Util/../Cipher/_raw_ecb.so: cannot open shared object file: No such file or directory",
"errorType": "OSError",
"stackTrace": [
" File \"/var/lang/lib/python3.8/imp.py\", line 234, in load_module\n return load_source(name, filename, file)\n",
" File \"/var/lang/lib/python3.8/imp.py\", line 171, in load_source\n module = _load(spec)\n",
" File \"<frozen importlib._bootstrap>\", line 702, in _load\n",
" File \"<frozen importlib._bootstrap>\", line 671, in _load_unlocked\n",
" File \"<frozen importlib._bootstrap_external>\", line 783, in exec_module\n",
" File \"<frozen importlib._bootstrap>\", line 219, in _call_with_frames_removed\n",
" File \"/var/task/billFetch.py\", line 1, in <module>\n from Crypto.Cipher import AES\n",
" File \"/var/task/Crypto/Cipher/__init__.py\", line 27, in <module>\n from Crypto.Cipher._mode_ecb import _create_ecb_cipher\n",
" File \"/var/task/Crypto/Cipher/_mode_ecb.py\", line 35, in <module>\n raw_ecb_lib = load_pycryptodome_raw_lib(\"Crypto.Cipher._raw_ecb\", \"\"\"\n",
" File \"/var/task/Crypto/Util/_raw_api.py\", line 297, in load_pycryptodome_raw_lib\n raise OSError(\"Cannot load native module '%s': %s\" % (name, \", \".join(attempts)))\n"
]
}
我确信问题出在“pycryptodome-3.10.1.dist info”库上,因为它与lambda OS不兼容,因为该代码在我的本地系统上运行良好,该系统也在python 3.8上
有谁能帮我解决这个问题吗?根据我的经验,包含lambda函数依赖项的最可靠的方法是通过使用docker,如中所述 因此,您可以将
pycrypto
添加到函数中,如下所示:
mylayer
requirements.txt
文件:
docker run -v "$PWD":/var/task "lambci/lambda:build-python3.8" /bin/sh -c "pip install -r requirements.txt -t python/lib/python3.8/site-packages/; exit"
mylayer.zip
创建lambda层。别忘了将兼容运行时
指定到python3.8
<class 'bytes'>
<class 'bytes'>
3f1f642e3ef7a8e568f1ed5a7f02cb823f1f642e3ef7a8e568f1ed5a7f02cb82
b'TechTutorialsX!!TechTutorialsX!!'
3f1f642e3ef7a8e568f1ed5a7f02cb823f1f642e3ef7a8e568f1ed5a7f02cb82
b'TechTutorialsX!!TechTutorialsX!!'
您是如何将该库添加到lambda的?@Marcin通过“pip install-t”在我的本地下载并压缩它,然后上载lambda代码如何在从层调用包时锁定lambda代码?@sumanthshetty您的lambda代码没有区别。您安装了“pycrypto”吗?我有windows本地计算机。需求的内容是什么。txt@sumanthshettyrequirements.txt
中的pycrypto
。我使用linux创建了这个层。如果windows有问题,可以尝试设置ec2 linux实例。如何将库从ec2计算机移动到本地计算机
docker run -v "$PWD":/var/task "lambci/lambda:build-python3.8" /bin/sh -c "pip install -r requirements.txt -t python/lib/python3.8/site-packages/; exit"
zip -9 -r mylayer.zip python
<class 'bytes'>
<class 'bytes'>
3f1f642e3ef7a8e568f1ed5a7f02cb823f1f642e3ef7a8e568f1ed5a7f02cb82
b'TechTutorialsX!!TechTutorialsX!!'