当前位置: 首页 > 知识库问答 >
问题:

安装pysqlcipher3时出现的问题

柴宏阔
2023-03-14

因此,即使pip安装pysqlcipher3成功地安装了pysqlcipher3,它也没有成功。

根据我的研究,这似乎是Windows用户试图安装Sqlcipher的常见问题。

尝试#1

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

在执行Python3setup.py构建时,我有一些错误(缺少几个需求,没有OPENSSL_CONF环境变量等)。),但我修复了其中的大部分。

但是,我最终遇到了这个错误:

致命错误C1083:无法打开包含文件:“sqlcipher/sqlite3.h”:没有此类文件或目录

尝试#2

我在某个地方读到(我想)我必须在安装PySqlCipher3之前安装SQLCipher。

经过检查,我发现我要么要付费获得预构建可执行文件,要么自己构建。

所以我试着在本教程之后自己构建它。

在安装了所有需求之后,按照这些步骤,我到达了另一个死胡同。在前一个步骤(步骤6)中,当执行nmake/f Makefile.msc时,我得到了以下错误:

致命错误C1083:无法打开包含文件:“stdio.h”:没有此类文件或目录

我的问题是:

  1. 我读到我需要libsqlcipher,这可能就是问题所在。在哪里可以找到它(首选可执行文件链接)。

我的目标是安装pysqlcipher3并使其正常工作。

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

所以我似乎缺少了VisualStudio中的一些C特性和工具。因此,通过VisualStudioCommunityInstaller,我下载并安装了基本的C语言,它修复了错误。

我得到了另一个错误,我通过将OpenSSL-Win64\include文件夹复制到C:\ProgramFiles(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

共有1个答案

魏鸿
2023-03-14

首先,成功安装pysqlcipher3具有误导性(至少到Github存储库上的当前最新提交fd1b547407bcb7198107fe3c458105286a060b0d)。我刚刚浪费了自己的一些时间,我想我应该再说清楚。

Linux系统上也会出现误导性的“成功安装pysqlcipher3”。如果你手边有一个Ubuntu/Debian系统,下面的内容可以帮助你。基本上,您需要在执行pip3命令之前安装SQLCipher库和开发文件。

$ 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上,未解析的外部符号RAND_bytes(编译器/链接器错误的第一行)基本上意味着您在Windows上的链接器找不到必要的OpenSSL库。

看看这里、这里和这里的帖子。他们有解决这个OpenSSL链接问题的方法。解决问题的基本步骤如下:

  1. 从此处下载并安装所需的32/64位OpenSSL版本
  2. 使Visual Studio使用OpenSSLinclude目录,例如C:\OpenSSL-Win32\include
  3. 使Visual Studio使用OpenSSL库目录,例如C:\OpenSSL-Win32\lib
  4. 在Visual Studio中添加以下库作为其他链接器依赖项:
    - libeay32.lib
    - libeay32MTd.lib
    - libeay32MT.lib
    - libeay32MDd.lib
    - libeay32MD.lib
    - ssleay32.lib
    - ssleay32MTd.lib
    - ssleay32MT.lib
    - ssleay32MDd.lib
    - ssleay32MD.lib
 类似资料:
  • 我一直在努力尝试,但我无法克服这个错误。我有Ruby版本1.8.7和Gem版本2.1.11,我试图安装open project,但我总是遇到这个错误 安装json(1.8.1)gem::installer::extensionbuilderror:错误:未能构建gem本机扩展。 迈克 安装json(1.8.1)时出错,Bundler无法继续。在绑定之前,请确保成功。==>出错:(==>安装中止。

  • 当我试图从PHP7.2.X版本加载mcrypt扩展模块时。 因此我尝试使用与当前PHP版本兼容的PECL库,以便安装并遵循以下链接:在安装期间在PHP7.2上安装mcrypt! 以下是在终端上执行某些命令后获得的结果。 因为我得到的错误类型是pecl7.2-sp:command not found 从留档部分可以清楚地看到,它已经被弃用了,从安全的角度来看,它将不再可用——从那以后,从PHP 7.

  • 我试图在Windows上安装Antlr 4.4,目的是使用pyfuzzy,这是一个模糊逻辑的Python库,它依赖于Antlr的Python运行时来运行。我曾尝试(天真地)在不安装Antlr的情况下获得Python (2.7)的Antlr运行时,当然这并不成功。 因此,我尝试按照Windows的说明安装Antlr,但每次运行时都会出现错误: antlr .jar文件位于 C:\JavaLib 中,

  • 您好,我正在安装XAMPP,MySQL端口3306有问题。 我已使用控制面板配置我的。ini并将端口设置更改为3307,但仍显示以下错误: 22:48:55[mysql]检测到问题!22:48:55[mysql]端口3306正在被“C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqld.exe”--defauls-file="C:\Program Da

  • 下面是显示的错误消息的屏幕截图。我使用的是Windows 10计算机,安装的节点版本为14。

  • 我正在尝试使用Django设置Python3.6环境。安装说明说我应该安装mysqlclient,以便能够连接到mySQL。我明白了: mySQL安装正确。mysql\u配置文件中应该包含什么?当我尝试升级pip3时,我得到以下结果: 在使用pip3安装mysqlClient后,我注意到该模块安装在python3.5目录中,而不是python3.6目录中,所以当我试图导入运行python3.6的M