3
votes

Problème lors de l'installation de pysqlcipher3

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:

  1. J'ai lu que j'avais besoin de libsqlcipher , ce qui pourrait être le problème. Où puis-je le trouver (lien vers l'exécutable préféré).
  2. Comment puis-je résoudre le problème lors de ma première tentative ?
  3. Comment puis-je résoudre le problème lors de ma deuxième tentative ?

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


0 commentaires

3 Réponses :


1
votes

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:

  1. Téléchargez et installez la version 32/64 bits d'OpenSSL requise à partir de ici li>
  2. Faire en sorte que Visual Studio utilise le répertoire OpenSSL include , par exemple C:\OpenSSL-Win32\include
  3. Faire en sorte que Visual Studio utilise le répertoire OpenSSL library , par exemple C:\OpenSSL-Win32\lib
  4. Ajoutez les bibliothèques suivantes en tant que dépendances supplémentaires de l'éditeur de liens dans Visual Studio:
$ 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']


0 commentaires

3
votes

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

  1. Installez python (s'il n'est pas déjà installé). J'avais la v3.7 64 bits
  2. Installez Win64OpenSSL-1_0_2u . Assurez-vous d'avoir exactement cette version depuis que j'ai téléchargé d'autres versions pour la première fois et qu'elles n'ont pas fonctionné.
  3. Ajoutez une variable d'environnement pour l'utilisateur et le système SET OPENSSL_CONF = C: \ OpenSSL-Win64 \ bin \ openssl.cfg (changez le chemin selon le vôtre)
  4. Installez ActiveTcl-8.6.9.8609.2-MSWin32-x64 . C'était le dernier en date et cela a fonctionné
  5. Installez visual studio (s'il n'est pas déjà installé). J'avais VS2019 v16.5.5
  6. Obtenez sqlcipher et procédez à l'extraction dans le répertoire
  7. Ouvrez les outils natifs de Visual Studio x64 et accédez au répertoire extrait ci-dessus de sqlcipher
  8. Exécutez la commande 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
  9. Obtenez Win32OpenSSL-1_0_2u . Auparavant, vous avez installé x64 et maintenant l'installation de x32. J'ai appris ce hack après plusieurs échecs - :)
  10. Ajustez les variables d'environnement pour SSL pour qu'elles pointent vers l'emplacement d'installation x32 au lieu de x64 comme cela est fait au point 3
  11. Fermez et rouvrez admin CMD et retapez la commande python setup.py build_amalgamation . Cette fois, cela devrait bien fonctionner sans aucune erreur.
  12. Exécutez maintenant la commande suivante python setup.py install
  13. Si tout se passe bien, cette commande devrait fonctionner dans cmd >> python >> à 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.


0 commentaires

1
votes

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


0 commentaires