python-3.x 导入错误:无法从“cryptography.hazmat.bindings._rust”(未知位置)导入名称“asn1”

nqwrtyyt  于 2023-10-21  发布在  Python
关注(0)|答案(2)|浏览(1337)

在导入paramiko时,有一些依赖模块会被导入,当导入发生时,它会失败并出现以下错误。有人能帮帮我吗。

File "python_program_to_fetch_the_latest_file_and_mail_it_as_a_attachment_v2.py", line 6, in <module>
        import paramiko
      File "/home/tclshare/tools/bin/python/python3.7.6-sles/lib/python3.7/site-packages/paramiko/__init__.py", line 22, in <module>
        from paramiko.transport import SecurityOptions, Transport
      File "/home/tclshare/tools/bin/python/python3.7.6-sles/lib/python3.7/site-packages/paramiko/transport.py", line 91, in <module>
        from paramiko.dsskey import DSSKey
      File "/home/tclshare/tools/bin/python/python3.7.6-sles/lib/python3.7/site-packages/paramiko/dsskey.py", line 25, in <module>
        from cryptography.hazmat.primitives import hashes, serialization
      File "/home/tclshare/tools/bin/python/python3.7.6-sles/lib/python3.7/site-packages/cryptography/hazmat/primitives/serialization/__init__.py", line 15, in <module>
        from cryptography.hazmat.primitives.serialization.base import (
      File "/home/tclshare/tools/bin/python/python3.7.6-sles/lib/python3.7/site-packages/cryptography/hazmat/primitives/serialization/base.py", line 9, in <module>
        from cryptography.hazmat.primitives.asymmetric.types import (
      File "/home/tclshare/tools/bin/python/python3.7.6-sles/lib/python3.7/site-packages/cryptography/hazmat/primitives/asymmetric/types.py", line 7, in <module>
        from cryptography.hazmat.primitives.asymmetric import (
      File "/home/tclshare/tools/bin/python/python3.7.6-sles/lib/python3.7/site-packages/cryptography/hazmat/primitives/asymmetric/dsa.py", line 10, in <module>
        from cryptography.hazmat.primitives.asymmetric import (
      File "/home/tclshare/tools/bin/python/python3.7.6-sles/lib/python3.7/site-packages/cryptography/hazmat/primitives/asymmetric/utils.py", line 6, in <module>
        from cryptography.hazmat.bindings._rust import asn1
    ImportError: cannot import name 'asn1' from 'cryptography.hazmat.bindings._rust' (unknown location)
0mkxixxg

0mkxixxg1#

当我将lambda python版本降低到3.8时,我也面临这个问题,它开始工作。

7tofc5zh

7tofc5zh2#

我认为这真的需要一个更好的文档解决方案,以避免任何进一步的头痛和痛苦,密码学是一个核心依赖于许多其他重要模块。

问题及解决方案:

加密依赖于一些外部系统依赖项和需要在系统上正确安装的外部二进制文件。当此模块被打包或复制到另一个系统,但没有从头开始正确安装时,您可能会遇到由于缺少依赖项或版本不兼容而导致的问题。
修复绑定错误的最佳方法是在系统上正确安装加密技术,并使用适当的系统兼容依赖项和链接。你有两个选择:
1-使用pip install cryptography或为您安装此模块的消费者模块通过pip直接在系统上升级和安装。这是安装密码的正式方式。这将安装所有必要的系统依赖项及其链接,并使它们可用。您可以通过ssh连接使用pip连接和安装虚拟机。对于AWS EC2或EMR集群,您也可以使用bootstrap actions,它将在创建虚拟机时安装这些依赖项。
2-从源代码构建自定义加密模块包:这是为了防止您无法访问"pip install",并且需要构建一个自定义映像,其中包含与您的运行时匹配并特别兼容的依赖项和链接(例如:例如AWS Lambda函数)。链接到密码编译说明。
这可能就是为什么它不能加载asn1.pyi文件的原因(. pyi是一个python接口文件,用于加载看起来像rust二进制文件的东西)。
Github issue explaining this same error due to dependencies Installation error

  • 注意:如果您手动将模块打包到AWS运行时,而不需要系统工具和二进制文件,这可能是问题所在。您需要保证所有外部系统依赖项都兼容并正确安装/更新以进行加密操作。*

可能出现此问题的模块:

这种正确的安装对于一些依赖密码的库非常重要,例如; snowfalke-connector-python; paramiko; Django; OpenSSL; pyOpenSSL; PyCryptodome。

相关问题