【问题标题】:ffi library can't be loaded from cryptography.hazmat.bindings._opensslffi 库无法从 cryptography.hazmat.bindings._openssl 加载
【发布时间】:2018-11-06 11:42:39
【问题描述】:

我正在尝试使用 anaconda(python 3.7 64 位)和 pymysql 包在 Windows 10 上打开一个 mysql 数据库。

在 windows 命令提示符下,我执行以下操作:

import pymysql
db = pymysql.connect(host='localhost', user='tester', passwd='xxxx', port=3306, db='mydb')

用户名、密码和端口正确;主机应该是本地主机(如果我通过 127.0.0.1,我会得到同样的错误);但我收到以下错误,最后指出它找不到 ffi 包:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\programs\Anaconda3\lib\site-packages\pymysql\__init__.py", line 94, in Connect
    return Connection(*args, **kwargs)
  File "C:\programs\Anaconda3\lib\site-packages\pymysql\connections.py", line 327, in __init__
    self.connect()
  File "C:\programs\Anaconda3\lib\site-packages\pymysql\connections.py", line 598, in connect
    self._request_authentication()
  File "C:\programs\Anaconda3\lib\site-packages\pymysql\connections.py", line 873, in _request_authentication
    auth_packet = _auth.caching_sha2_password_auth(self, auth_packet)
  File "C:\programs\Anaconda3\lib\site-packages\pymysql\_auth.py", line 252, in caching_sha2_password_auth
    data = sha2_rsa_encrypt(conn.password, conn.salt, conn.server_public_key)
  File "C:\programs\Anaconda3\lib\site-packages\pymysql\_auth.py", line 132, in sha2_rsa_encrypt
    rsa_key = serialization.load_pem_public_key(public_key, default_backend())
  File "C:\programs\Anaconda3\lib\site-packages\cryptography\hazmat\backends\__init__.py", line 15, in default_backend
    from cryptography.hazmat.backends.openssl.backend import backend
  File "C:\programs\Anaconda3\lib\site-packages\cryptography\hazmat\backends\openssl\__init__.py", line 7, in <module>
    from cryptography.hazmat.backends.openssl.backend import backend
  File "C:\programs\Anaconda3\lib\site-packages\cryptography\hazmat\backends\openssl\backend.py", line 53, in <module>
    from cryptography.hazmat.bindings.openssl import binding
  File "C:\programs\Anaconda3\lib\site-packages\cryptography\hazmat\bindings\openssl\binding.py", line 13, in <module>
    from cryptography.hazmat.bindings._openssl import ffi, lib
ImportError: DLL load failed: The specified module could not be found.

我发现 conda navigator(也不是 pip)在其标准频道中看不到 ffi 包。

我已经尝试过这个建议(添加 conda-forge 频道):

conda config --add 通道 conda-forge conda 安装 libffi

但是 conda 在“解决环境”中需要很长时间,并且不会在合理的时间内给出答案。

我应该怎么做才能安装 ffi 并能够连接到数据库?我是世界上第一个在 windows 上从 python/Anaconda 调用 mysql 的人吗?我想一定有解决办法。

谢谢,马可

【问题讨论】:

    标签: python mysql windows anaconda ffi


    【解决方案1】:

    我遇到了同样的问题。这是为我解决的问题: 1. pip uninstall scrapy 2. conda uninstall scrapy 3. pip install --force --upgrade scrapy 4. scrapy startproject dingding 它有效。

    【讨论】:

    • 谢谢,为我做了。
    【解决方案2】:

    我遇到了类似的错误:

    File "/root/ncs/bootloader/mcuboot/scripts/imgtool.py", line 22, in <module>
        main.imgtool()
      File "/usr/lib/python3.7/site-packages/lib/python3.7/site-packages/click/core.py", line 829, in __call__
        return self.main(*args, **kwargs)
      File "/usr/lib/python3.7/site-packages/lib/python3.7/site-packages/click/core.py", line 782, in main
        rv = self.invoke(ctx)
      File "/usr/lib/python3.7/site-packages/lib/python3.7/site-packages/click/core.py", line 1259, in invoke
        return _process_result(sub_ctx.command.invoke(sub_ctx))
      File "/usr/lib/python3.7/site-packages/lib/python3.7/site-packages/click/core.py", line 1066, in invoke
        return ctx.invoke(self.callback, **ctx.params)
      File "/usr/lib/python3.7/site-packages/lib/python3.7/site-packages/click/core.py", line 610, in invoke
        return callback(*args, **kwargs)
      File "/root/ncs/bootloader/mcuboot/scripts/imgtool/main.py", line 111, in getpub
        key = load_key(key)
      File "/root/ncs/bootloader/mcuboot/scripts/imgtool/main.py", line 74, in load_key
        key = keys.load(keyfile)
      File "/root/ncs/bootloader/mcuboot/scripts/imgtool/keys/__init__.py", line 52, in load
        backend=default_backend())
      File "/usr/lib/python3.7/site-packages/cryptography/hazmat/backends/__init__.py", line 14, in default_backend
        from cryptography.hazmat.backends.openssl.backend import backend
      File "/usr/lib/python3.7/site-packages/cryptography/hazmat/backends/openssl/__init__.py", line 6, in <module>
        from cryptography.hazmat.backends.openssl.backend import backend
      File "/usr/lib/python3.7/site-packages/cryptography/hazmat/backends/openssl/backend.py", line 113, in <module>
        from cryptography.hazmat.bindings.openssl import binding
      File "/usr/lib/python3.7/site-packages/cryptography/hazmat/bindings/openssl/binding.py", line 14, in <module>
        from cryptography.hazmat.bindings._openssl import ffi, lib
    ImportError: this module was compiled for Python 3.5
    

    解决办法:

    • /usr/lib/usr/local/lib 中搜索_cffi_backend.cpython*.so

    • 杀死这些_cffi_backend.cpython*.so

    • /usr/lib/usr/local/lib 中搜索cffi 目录

    • 杀死这些目录

    • pip3 install --force-reinstall cryptography

    【讨论】:

      猜你喜欢
      • 2019-06-02
      • 2015-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多