Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;无法加载本机模块';加密。密码。_raw_ecb';:尝试'_raw_ecb.cpython-38-x86_64-linux-gnu.so';在python 3.8上运行Lambda时_Python_Python 3.x_Amazon Web Services_Aws Lambda - Fatal编程技术网

&引用;无法加载本机模块';加密。密码。_raw_ecb';:尝试'_raw_ecb.cpython-38-x86_64-linux-gnu.so';在python 3.8上运行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

我正在尝试用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.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命令:
  • 该命令将为python3.8创建图层:

    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:
  • 基于AWS控制台中的
    mylayer.zip
    创建lambda层。别忘了将
    兼容运行时
    指定到
    python3.8

  • 将步骤5中创建的层添加到函数中

  • 我用你的代码测试了这个层

  • 它正常工作:

    <class 'bytes'>
    <class 'bytes'>
    3f1f642e3ef7a8e568f1ed5a7f02cb823f1f642e3ef7a8e568f1ed5a7f02cb82
    b'TechTutorialsX!!TechTutorialsX!!'
    
    
    3f1f642e3ef7a8e568f1ed5a7f02cb823f1f642e3ef7a8e568f1ed5a7f02cb82
    b'TechTutorialsX!!TechTutorialsX!!'
    
    您是如何将该库添加到lambda的?@Marcin通过“pip install-t”在我的本地下载并压缩它,然后上载lambda代码如何在从层调用包时锁定lambda代码?@sumanthshetty您的lambda代码没有区别。您安装了“pycrypto”吗?我有windows本地计算机。需求的内容是什么。txt@sumanthshetty
    requirements.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!!'