Проблема при установке pysqlcipher3
Так что даже если pip install pysqlcipher3
работал вернулся Successfully installed pysqlcipher3
это не так.
Из моего исследования кажется, что это обычная проблема для пользователей Windows, пытающихся установить Sqlcipher.
Попытка № 1
Сначала я пытаюсь скачать pysqlcipher3 с github, собрать и установить его вручную через cmd (используя python setup.py build
а также python seetup.py install
).
После выполнения python3 setup.py build
Я получил некоторую ошибку (пропустив несколько требований, не имея OPENSSL_CONF в переменной окружения... и т. Д.), Но я исправил большинство из них.
Тем не менее, я застрял с этой ошибкой:
fatal error C1083: Cannot open include file: 'sqlcipher/sqlite3.h': No such file or directory
,
Попытка № 2
Я где-то читал (я думаю), что мне нужно установить SQLCipher перед установкой PySqlCipher3.
После проверки я обнаружил, что мне нужно либо заплатить, чтобы получить готовый исполняемый файл, либо собрать его самостоятельно.
Поэтому я попытался создать его самостоятельно, следуя этому руководству.
После установки всех требований и после шагов я захожу в другой тупик. На шаге перед последним (шаг № 6) при выполнении nmake /f Makefile.msc
Я получил эту ошибку:
fatal error C1083: Cannot open include file: 'stdio.h': No such file or directory
Мой вопрос:
- Я прочитал, что мне нужно
libsqlcipher
что может быть проблемой. Где я могу найти его (ссылка на исполняемый файл предпочтительнее). - Как я могу решить проблему с первой попытки?
- Как я могу решить проблему во второй попытке?
Моя цель: установить и работать с pysqlcipher3.
РЕДАКТИРОВАТЬ 1 - решено Попытка № 2 только для достижения другой проблемы
Похоже, мне не хватало некоторых функций и инструментов C++ в Visual Studio. Таким образом, с помощью установщика Visual Studio Community я загружаю и устанавливаю базовые компоненты C++, и это исправило ошибку.
Я получил еще одну ошибку, которую я исправляю, копируя OpenSSL-Win64\include
папка для C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include
,
Однако теперь я застрял с этой ошибкой:
sqlite3.c(77701): warning C4389: '!=': signed/unsigned mismatch
lib.exe /NOLOGO /MACHINE:x64 /OUT:libsqlite3.lib sqlite3.lo
echo EXPORTS > sqlcipher.def
dumpbin /all libsqlite3.lib | tclsh .\tool\replace.tcl include "^\s+1 _?(sqlite3(?:session|changeset|changegroup|rebaser)?_[^@]*)(?:@\d+)?$" \1 | sort >> sqlcipher.def
link.exe /DEBUG /NOLOGO /MACHINE:x64 /DLL /DEF:sqlcipher.def /OUT:sqlcipher.dll sqlite3.lo sqlite3res.lo
Creating library sqlcipher.lib and object sqlcipher.exp
sqlite3.lo : error LNK2019: unresolved external symbol RAND_bytes referenced in function sqlcipher_openssl_random
sqlite3.lo : error LNK2019: unresolved external symbol RAND_add referenced in function sqlcipher_openssl_add_random
sqlite3.lo : error LNK2019: unresolved external symbol OBJ_nid2sn referenced in function sqlcipher_openssl_get_cipher
sqlite3.lo : error LNK2019: unresolved external symbol EVP_MD_size referenced in function sqlcipher_openssl_get_hmac_sz
sqlite3.lo : error LNK2019: unresolved external symbol EVP_CIPHER_nid referenced in function sqlcipher_openssl_get_cipher
sqlite3.lo : error LNK2019: unresolved external symbol EVP_CIPHER_block_size referenced in function sqlcipher_openssl_get_block_sz
sqlite3.lo : error LNK2019: unresolved external symbol EVP_CIPHER_key_length referenced in function sqlcipher_openssl_get_key_sz
sqlite3.lo : error LNK2019: unresolved external symbol EVP_CIPHER_iv_length referenced in function sqlcipher_openssl_get_iv_sz
sqlite3.lo : error LNK2019: unresolved external symbol EVP_CipherInit_ex referenced in function sqlcipher_openssl_cipher
sqlite3.lo : error LNK2019: unresolved external symbol EVP_CipherUpdate referenced in function sqlcipher_openssl_cipher
sqlite3.lo : error LNK2019: unresolved external symbol EVP_CipherFinal_ex referenced in function sqlcipher_openssl_cipher
sqlite3.lo : error LNK2019: unresolved external symbol EVP_CIPHER_CTX_new referenced in function sqlcipher_openssl_cipher
sqlite3.lo : error LNK2019: unresolved external symbol EVP_CIPHER_CTX_free referenced in function sqlcipher_openssl_cipher
sqlite3.lo : error LNK2019: unresolved external symbol EVP_CIPHER_CTX_set_padding referenced in function sqlcipher_openssl_cipher
sqlite3.lo : error LNK2019: unresolved external symbol EVP_sha1 referenced in function sqlcipher_openssl_get_hmac_sz
sqlite3.lo : error LNK2019: unresolved external symbol EVP_sha256 referenced in function sqlcipher_openssl_get_hmac_sz
sqlite3.lo : error LNK2019: unresolved external symbol EVP_sha512 referenced in function sqlcipher_openssl_get_hmac_sz
sqlite3.lo : error LNK2019: unresolved external symbol EVP_get_cipherbyname referenced in function sqlcipher_openssl_activate
sqlite3.lo : error LNK2019: unresolved external symbol PKCS5_PBKDF2_HMAC referenced in function sqlcipher_openssl_kdf
sqlite3.lo : error LNK2019: unresolved external symbol HMAC_CTX_new referenced in function sqlcipher_openssl_hmac
sqlite3.lo : error LNK2019: unresolved external symbol HMAC_CTX_free referenced in function sqlcipher_openssl_hmac
sqlite3.lo : error LNK2019: unresolved external symbol HMAC_Init_ex referenced in function sqlcipher_openssl_hmac
sqlite3.lo : error LNK2019: unresolved external symbol HMAC_Update referenced in function sqlcipher_openssl_hmac
sqlite3.lo : error LNK2019: unresolved external symbol HMAC_Final referenced in function sqlcipher_openssl_hmac
sqlcipher.dll : fatal error LNK1120: 24 unresolved externals
0 ответов
У меня также были почти все ваши проблемы, поэтому я создал это руководство, которое сработало для меня.
Моя сборка: windows 10 x64 v1909
- Установите python (если он еще не установлен). У меня была v3.7 64 бит
- Установите Win64OpenSSL-1_0_2u. Убедитесь, что вы получили именно эту версию, поскольку я сначала загрузил несколько других версий, и они не работали.
- Добавить переменную среды как для пользователя, так и для системы
SET OPENSSL_CONF=C:\OpenSSL-Win64\bin\openssl.cfg
(измените путь согласно вашему) - Установите ActiveTcl-8.6.9.8609.2-MSWin32-x64. Это было последним в то время и работало
- Установите визуальную студию (если она еще не установлена). У меня был VS2019 v16.5.5
- Получите sqlcipher и распакуйте в каталог
- Откройте собственные инструменты Visual Studio x64 и перейдите в извлеченный выше каталог
sqlcipher
- Команда Run
nmake /f Makefile.msc
. Финальная компиляция сообщит об ошибке, но это не имеет значения, здесь нам не нужна настоящая компиляция, нужно толькоsqlite3.c
- Получите pysqlcipher3-1.0.3, распакуйте в каталог и перейдите к нему
- Создайте папку с именем
amalgamation
в нем и создайте еще одну папку с именемsqlcipher
вamalgamation
папка - Копировать
sqlite3.h
а такжеsqlite3.c
создан на шаге Visual Studio (вsqlcipher-master
папка) вamalgamation
папка иsqlcipher
папка как - Откройте административную командную строку и перейдите в извлеченный выше каталог
pysqlcipher3-1.0.3
- Выполните следующую команду
python setup.py build_amalgamation
- Это приведет к ошибкам связи, как заявил OP. Теперь установите Win32OpenSSL-1_0_2u. Раньше вы устанавливали x64, а теперь устанавливаете x32. Я научился этому хаку после нескольких неудач -:)
- Отрегулируйте переменные среды для SSL, чтобы они указывали на установленное место x32 вместо x64, как это сделано в пункте 3
- Закройте и снова откройте CMD администратора и повторно введите команду.
python setup.py build_amalgamation
. На этот раз все должно работать без ошибок. - Теперь запустите следующую команду
python setup.py install
- Если все пойдет хорошо, эта команда должна работать в cmd>>python>>
from pysqlcipher3 import dbapi2
Некоторые полезные ссылки для меня 1, 2, 3, 4, 5
Если вы не получите точные версии, такие как моя, из-за того, что в будущем ссылки будут повреждены, вы можете прокомментировать, и если они у меня есть в то время, я загружу на облачный диск.
Прежде всего, "Successfully installed pysqlcipher3"
вводит в заблуждение (по крайней мере, до последнего коммита fd1b547407bcb7198107fe3c458105286a060b0d в репозитории Github). Я только что потратил впустую часть своего времени и подумал, что должен еще раз прояснить это.
Вводящий в заблуждение "Successfully installed pysqlcipher3"
также появляется в системах Linux. Если у вас под рукой есть система Ubuntu/Debian, вам поможет следующее. В основном вам нужно установитьSQLCipher
библиотеки и файлы разработки до pip3
команда.
$ sudo apt install sqlcipher libsqlcipher0 libsqlcipher-dev
$ sudo -H pip3 install pysqlcipher3
$ python3 -c 'import pysqlcipher3; print(pysqlcipher3.__path__)'
['/usr/local/lib/python3.7/dist-packages/pysqlcipher3']
Поскольку вы работаете в Windows, unresolved external symbol RAND_bytes
(первая строка в вашей ошибке компилятора / компоновщика) в основном означает, что ваш компоновщик в Windows не может найти необходимые OpenSSL
библиотеки.
Посмотрите сообщения здесь, здесь и здесь. У них есть решения именно этой проблемы связывания OpenSSL. Основные шаги к разрешению следующие:
- Загрузите и установите необходимую 32/64-битную версию OpenSSL отсюда
- Заставьте Visual Studio использовать
OpenSSL
включить каталог, напримерC:\OpenSSL-Win32\include
- Заставьте Visual Studio использовать
OpenSSL
каталог библиотеки, напримерC:\OpenSSL-Win32\lib
- Добавьте следующие библиотеки в качестве зависимостей дополнительных компоновщиков в Visual Studio:
- libeay32.lib
- libeay32MTd.lib
- libeay32MT.lib
- libeay32MDd.lib
- libeay32MD.lib
- ssleay32.lib
- ssleay32MTd.lib
- ssleay32MT.lib
- ssleay32MDd.lib
- ssleay32MD.lib
На iMac под управлением Catalina macOS 10.15.4, когда я пытался установить pysqlcipher3, он выдавал сообщения об ошибках
Но потом я побежал
$ brew install SQLCipher
который успешно работал:
$ brew install SQLCipher
==> Downloading https://homebrew.bintray.com/bottles/sqlcipher-4.4.0.catalina.bottle.tar.gz
==> Downloading from https://akamai.bintray.com/9e/9e860b50ec668ef30f61377f39954241c4eeda4c4a664fbe1340e289229336bf?__gda__=exp=1590256907~hmac=9bb692e78355e890ab
######################################################################## 100.0%
==> Pouring sqlcipher-4.4.0.catalina.bottle.tar.gz
/usr/local/Cellar/sqlcipher/4.4.0: 13 files, 3.9MB
Теперь, когда я попытался установить pysqlcipher3 во второй раз, он также успешно установился:
$ pip3 install pysqlcipher3
Collecting pysqlcipher3
Using cached pysqlcipher3-1.0.3.tar.gz (100 kB)
Building wheels for collected packages: pysqlcipher3
Building wheel for pysqlcipher3 (setup.py) ... done
Created wheel for pysqlcipher3: filename=pysqlcipher3-1.0.3-cp37-cp37m-macosx_10_15_x86_64.whl size=61077 sha256=28e480d5999a13cf2446a262cff9d746853d0bf90541a76e473f66a7128ff877
Stored in directory: /Users/kitzume/Library/Caches/pip/wheels/91/30/b9/1ee85dc50cddf37ecb5198dfa6279aa72eeb0148063b5ad0c6
Successfully built pysqlcipher3
Installing collected packages: pysqlcipher3
Successfully installed pysqlcipher3-1.0.3