首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >安装pysqlcipher3时出现问题

安装pysqlcipher3时出现问题
EN

Stack Overflow用户
提问于 2019-03-31 23:35:46
回答 3查看 7.1K关注 0票数 8

因此,尽管pip install pysqlcipher3工作返回了Successfully installed pysqlcipher3,但事实并非如此。

从我的研究来看,这似乎是Windows用户试图安装user密码的一个常见问题。

尝试#1

首先,我尝试从github下载pysqlcipher3,并通过cmd手动构建和安装它(使用python setup.py buildpython seetup.py install)。

在执行python3 setup.py build时,我得到了一些错误(缺少一些需求,在环境variable...etc中没有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

我的问题是:

  1. 我读到我需要libsqlcipher,这可能是问题所在。我可以在哪里找到它(链接到可执行的首选)。
  2. 我第一次尝试如何解决这个问题?
  3. 我如何在第二次尝试中解决这个问题?

我的目标是:安装和工作pysqlcipher3。

编辑1已解决的尝试#2只是为了达到另一个问题

因此,在Visual中,我似乎缺少了一些C++特性和工具。因此,通过,我下载并安装了基本的C++内容,并修复了错误。

通过将OpenSSL-Win64\include文件夹复制到C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include,我得到了另一个修复错误。

然而,现在我被这个错误困住了:

代码语言:javascript
运行
复制
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
EN

回答 3

Stack Overflow用户

发布于 2019-10-17 06:13:58

首先,"Successfully installed pysqlcipher3"具有误导性(至少到目前Github储存库上的最新版本)。我只是浪费了我自己的一些时间,我想我应该再次表明这一点。

误导的"Successfully installed pysqlcipher3"也出现在Linux系统上。如果您手头有一个Ubuntu/Debian系统,下面的内容可以帮助您运行。基本上,您需要在SQLCipher命令之前安装pip3库和开发文件。

代码语言:javascript
运行
复制
$ 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链接问题的解决方案。解决问题的基本步骤如下:

  1. 从OpenSSL下载并安装所需的32/64位版本的这里
  2. 使Visual使用OpenSSL 包括目录,例如C:\OpenSSL-Win32\include
  3. 使Visual使用OpenSSL 目录,例如C:\OpenSSL-Win32\lib
  4. 在Visual中添加以下库作为附加的链接器依赖项:
代码语言:javascript
运行
复制
    - libeay32.lib
    - libeay32MTd.lib
    - libeay32MT.lib
    - libeay32MDd.lib
    - libeay32MD.lib
    - ssleay32.lib
    - ssleay32MTd.lib
    - ssleay32MT.lib
    - ssleay32MDd.lib
    - ssleay32MD.lib
票数 4
EN

Stack Overflow用户

发布于 2020-05-19 08:49:16

我也有你几乎所有的问题,所以我创建了下面的指南,为我工作。

我的构建: windows 10 x64 v1909

  1. 安装python (如果尚未安装)。我的v3.7 64位
  2. 安装2u。因为我第一次下载了一些其他版本,但是它们没有工作,所以一定要准确地得到这个版本。
  3. 为用户和系统SET OPENSSL_CONF=C:\OpenSSL-Win64\bin\openssl.cfg添加环境变量(按您的更改路径)
  4. 安装ActiveTcl-8.6.9.8609.2-MSWin32-x64。这是最近的一次,起了作用。
  5. 安装visual studio (如果尚未安装)。我有VS2019的16.5.5版
  6. 获取方形密码并解压缩到目录
  7. 打开visual studio x64本机工具并导航到sqlcipher的上述解压缩目录。
  8. 运行命令nmake /f Makefile.msc。最后的编译会报告一个错误,但没关系,我们这里不需要真正的编译,只需要sqlite3.c
  9. 获取pysqlcipher3-1.0.3,解压缩到目录并导航到它
  10. 在其中创建名为amalgamation的文件夹,并在amalgamation文件夹中创建另一个名为sqlcipher的文件夹
  11. 将Visual步骤中创建的sqlite3.hsqlite3.c (在sqlcipher-master文件夹中)复制到amalgamation文件夹和sqlcipher文件夹
  12. 打开管理命令提示符并导航到上面提取的pysqlcipher3-1.0.3目录
  13. 运行以下命令python setup.py build_amalgamation
  14. 如OP所述,这将导致连接错误。现在安装2u。早些时候,您安装了x64,现在安装了x32。-:)我在多次失败后学会了这一攻击:)
  15. 调整SSL的环境变量以指向x32安装位置,而不是按照点3中的x64进行调整。
  16. 关闭并重新打开admin并重新键入命令python setup.py build_amalgamation。这一次,它应该运行良好,没有任何错误。
  17. 现在运行以下命令python setup.py install
  18. 如果一切顺利,那么这个命令应该可以在cmd>>python>>from pysqlcipher3 import dbapi2中工作。

一些有用的链接给我123.4.5

如果你没有得到准确的版本,因为我的链接在未来打破,你可以评论,如果我有他们在那个时候,我会上传到一个云驱动器。

更新27-APR-2021用于Pythonv3.9.4 x64

  1. 我尝试对Pythonv3.9.4 x64重复上面的步骤,但是由于以下两个原因,出现了更多的错误 1.1。宏MODULE_NAME在编译前没有进行正确的分析,正如@ properly 30在注释中指出的那样。错误如下: src\python3 3\cache.c(261):错误C2017:非法转义序列 1.2。由于删除了python版本3.9中的一些函数的功能
  2. 对于第一个问题,由于宏是一个预处理指令(从cl.exe文件提供给setup.py编译器),因此可以通过适当的替换来替换所有出现的错误,从而消除错误。对于我的系统配置,我将文件夹MODULE_NAME中的所有pysqlcipher3-1.0.4/src/python3替换为pysqlcipher3.dbapi2,从而解决了这个问题。
  3. 对于第二个问题,解决方案是手动提供从Python v>3.8中删除的所有函数的替换。这对我来说很烦人。幸运的是,pysqlcipher3 1.0.4刚刚发布了几天前(4月25日至21日)已经解决了这个问题,并提供了替代品。因此,最好是使用pysqlcipher3 1.0.4的源文件,而不是像上面第9点所做的那样使用pysqlcipher3 1.0.3
  4. 为了避免编译pysqlcipher3的所有麻烦,我为Pythonv3.9.4 x64 在这个链接上放置了预编译的二进制文件以及说明。(免责声明:由于存储限制,该链接今后可能会被删除。)
票数 3
EN

Stack Overflow用户

发布于 2020-05-23 17:58:19

在运行Catalina macOS 10.15.4的iMac上,当我试图安装pysqlcipher3时,它会发出错误消息

但后来我跑了

代码语言:javascript
运行
复制
$ brew install SQLCipher

它成功地发挥了作用:

代码语言:javascript
运行
复制
$ 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时,它也成功地安装了:

代码语言:javascript
运行
复制
$ 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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55446420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档