Donc, même si pip install pysqlcipher3
a fonctionné a renvoyé pysqlcipher3
installé avec succès, il ne l'a pas fait.
D'après mes recherches, il semble que ce soit un problème courant pour les utilisateurs de Windows essayer d'installer Sqlcipher.
Tentative n ° 1
Tout d'abord, j'essaye de télécharger le pysqlcipher3 depuis github et de le construire et de l'installer manuellement via cmd (en utilisant python setup.py build et python seetup.py install
).
Lors de l'exécution de python3 setup.py build
, j'ai eu une erreur (manque de quelques exigences, ne pas avoir OPENSSL_CONF dans la variable d'environnement ... etc.) mais je corrige la plupart d'entre eux.
Cependant, je me retrouve coincé avec cette erreur:
erreur fatale C1083: Impossible d'ouvrir le fichier d'inclusion: 'sqlcipher / sqlite3.h': Aucun fichier ou répertoire de ce type code>.
Tentative # 2
J'ai lu quelque part (je pense) que je devais installer le SQLCipher avant d'installer PySqlCipher3.
En vérifiant, j'ai découvert que je devais soit payer pour obtenir un exécutable de pré-compilation, soit le construire moi-même.
J'ai donc essayé de le construire moi-même en suivant ce tutoriel a >.
Après avoir installé toutes les exigences et suivi les étapes, j'atteins une autre impasse. Dans l'avant-dernière étape (étape numéro 6), lors de l'exécution de nmake / f Makefile.msc
j'ai eu cette erreur:
erreur fatale C1083: Impossible d'ouvrir le fichier d'inclusion : 'stdio.h': Aucun fichier ou répertoire de ce type
Ma question est:
libsqlcipher
, ce qui pourrait être le problème. Où puis-je le trouver (lien vers l'exécutable préféré). Mon objectif: est d'avoir pysqlcipher3 installé et fonctionnel.
EDIT 1 - Résolu Tentative n ° 2 juste pour atteindre un autre problème
Il semble donc que je manquais certaines fonctionnalités et outils C ++ dans Visual Studio. Ainsi, via le programme d'installation de Visual Studio Community, je télécharge et installe des éléments de base C ++ et cela a corrigé l'erreur.
J'ai eu une autre erreur que je corrige en copiant le dossier OpenSSL-Win64 \ include
dans C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Community \ VC \ Tools \ MSVC \ 14.16.27023 \ include
.
Cependant, maintenant je suis coincé avec cette erreur:
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
3 Réponses :
Tout d'abord, "pysqlcipher3 installé avec succès"
est trompeur (au moins jusqu'à la dernière version actuelle commit fd1b547407bcb7198107fe3c458105286a060b0d sur le référentiel Github ). Je viens de perdre un peu de mon temps et j'ai pensé que je devrais le préciser à nouveau.
Le trompeur "pysqlcipher3"
apparaît également sur les systèmes Linux. Dans le cas où vous avez un système Ubuntu / Debian à portée de main, ce qui suit vous permettra de démarrer. Fondamentalement, vous devez installer les bibliothèques SQLCipher
et les fichiers de développement avant la commande pip3
.
- libeay32.lib - libeay32MTd.lib - libeay32MT.lib - libeay32MDd.lib - libeay32MD.lib - ssleay32.lib - ssleay32MTd.lib - ssleay32MT.lib - ssleay32MDd.lib - ssleay32MD.lib
Puisque vous êtes sous Windows , symbole externe non résolu RAND_bytes
(première ligne sur l'erreur de votre compilateur / éditeur de liens) signifie essentiellement que votre éditeur de liens sous Windows ne peut pas trouver les bibliothèques OpenSSL
nécessaires.
Consultez les articles ici , ici et ici . Ils ont des solutions à ce problème de liaison OpenSSL exact. Les étapes de base vers la résolution sont les suivantes:
OpenSSL
include , par exemple C:\OpenSSL-Win32\include
OpenSSL
library , par exemple C:\OpenSSL-Win32\lib
$ 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']
J'ai également eu presque tous vos problèmes et j'ai donc créé ce guide ci-dessous qui a fonctionné pour moi
Ma version: Windows 10 x64 v1909
SET OPENSSL_CONF = C: \ OpenSSL-Win64 \ bin \ openssl.cfg
(changez le chemin selon le vôtre) sqlcipher
nmake / f Makefile.msc
. La compilation finale rapportera une erreur, mais ce n'est pas grave, nous n'avons pas besoin d'une vraie compilation ici, seulement besoin de sqlite3.c
python setup.py build_amalgamation
. Cette fois, cela devrait bien fonctionner sans aucune erreur. python setup.py install
à partir de pysqlcipher3 import dbapi2
Quelques liens utiles pour moi 1 , 2 , 3 , 4 , 5
Si vous n'obtenez pas des versions exactes comme les miennes en raison de liens rompus à l'avenir, vous pouvez commenter et si je les ai à ce moment-là, je les téléchargerai sur un lecteur cloud.
Sur iMac exécutant Catalina macOS 10.15.4, quand j'ai essayé d'installer pysqlcipher3, il a craché des messages d'erreur
Mais ensuite j'ai exécuté
$ 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
qui a fonctionné avec succès:
$ 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
Maintenant, quand j'ai essayé d'installer pysqlcipher3 la deuxième fois, il s'est également installé avec succès:
$ brew install SQLCipher