библиотеката ffi не може да се зареди от cryptography.hazmat.bindings._openssl

Опитвам се да отворя mysql база данни на Windows 10, с anaconda (python 3.7 64 бита) и пакета pymysql.

От командния ред на Windows правя следното:

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

Потребителското име, паролата и портът са правилни; хостът трябва да е localhost (получавам същата грешка, ако предам 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 --добавяне на канали conda-forge conda инсталиране на libffi

но conda отнема завинаги в "решаваща среда" и не дава отговори в разумно време.

Какво трябва да направя, за да инсталирам ffi и да мога да се свържа с db? Аз ли съм първият в света в извикването на mysql от python/Anaconda на windows? Предполагам, че трябва да има решение.

Благодаря, Марко


person crillion    schedule 06.11.2018    source източник


Отговори (2)


Сблъсках се със същия проблем. Ето какво реши проблема за мен: 1. pip uninstall scrapy 2. conda uninstall scrapy 3. pip install --force --upgrade scrapy 4. scrapy startproject dingding Работи.

person gallonyin    schedule 24.12.2018
comment
Благодаря, това ми помогна. - person Tensigh; 12.10.2019

Получих подобна грешка:

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

Решение:

  • Търсете _cffi_backend.cpython*.so в /usr/lib и /usr/local/lib

  • Убийте тези _cffi_backend.cpython*.so

  • Търсене в cffi директории в /usr/lib и /usr/local/lib

  • Убийте тези директории

  • pip3 install --force-reinstall cryptography

person YU Chen Shih    schedule 17.05.2021