首页 > 编程问答 >安装pysqlcipher3的问题

安装pysqlcipher3的问题

时间:2024-07-21 00:32:30浏览次数:14  
标签:python installation sqlcipher pysqlcipher

因此,尽管 pip install pysqlcipher3 工作返回 Successfully installed pysqlcipher3 ,但没有。

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

尝试#1

首先,我尝试从github下载pysqlcipher3并通过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


我读到我需要

  1. 这可能是问题所在。我在哪里可以找到它(首选链接到可执行文件)。 libsqlcipher 我如何解决我的
  2. 第一次尝试中的问题 我如何解决我的
  3. 第二次尝试中的问题|| |? 我的目标: 安装并运行 pysqlcipher3。

编辑 1 - 解决了尝试 #2 只是为了达到另一个问题 所以看来我缺少一些 C++ 功能和工具视觉工作室。因此,通过 Visual Studio Community 安装程序,我下载并安装了基本的 C++ 内容,它修复了错误。


我遇到了另一个错误,我通过将

文件夹复制到

来修复该错误。 OpenSSL-Win64\include 但是,现在我陷入了困境出现此错误: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include .

However, now I am stuck with this error:

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

错误信息显示链接器在 sqlite3.lo 中找不到 OpenSSL 库中定义的多个函数,例如 RAND_bytes EVP_CipherInit_ex 等。这意味着需要在构建过程中链接 OpenSSL 库。

以下是解决此问题的步骤:

1. 确认 OpenSSL 库文件的位置:

确保已成功构建或下载了 OpenSSL 库,并且 libcrypto.lib libssl.lib 文件位于系统的已知位置。

2. 更新 Makefile.msc 文件:

需要修改构建 SQLCipher 时使用的 Makefile.msc 文件,以包含 OpenSSL 库路径和链接器标志。

  • 添加 OpenSSL 库路径:

    • 找到 Makefile.msc 文件中的 LFLAGS 部分。
    • LFLAGS 中添加 OpenSSL 库目录路径。例如,如果 OpenSSL 库文件位于 C:\openssl-1.1.1k\lib ,则添加以下行: LFLAGS=/LIBPATH:"C:\openssl-1.1.1k\lib"
  • 链接 OpenSSL 库文件:

    • Makefile.msc 文件中的 LFLAGS 部分中,添加以下内容来链接 libcrypto.lib libssl.lib LFLAGS=/LIBPATH:"C:\openssl-1.1.1k\lib" libcrypto.lib libssl.lib

3. 清理并重新构建 SQLCipher:

Makefile.msc 中进行更改后,需要清理之前的构建文件并重新构建 SQLCipher。在命令提示符中,导航到 SQLCipher 源代码目录并运行以下命令:

nmake clean
nmake

这将使用更新的 Makefile.msc 设置重新构建 SQLCipher,并将 OpenSSL 库链接到生成的 sqlcipher.dll 文件中。

4. 安装 PySqlCipher3:

成功构建 SQLCipher 后,可以尝试再次安装 pysqlcipher3

pip install pysqlcipher3

这次安装应该能够找到并链接所需的 OpenSSL 库,从而解决链接错误。

如果问题仍然存在:

  • 确保的环境变量 PATH 中包含 OpenSSL 库目录的路径,以便系统可以找到 libcrypto.dll libssl.dll 文件。
  • 检查 Visual Studio 项目设置,确认链接器选项中包含了 OpenSSL 库目录和文件。

希望这些步骤可以帮助解决问题并成功安装 pysqlcipher3

标签:python,installation,sqlcipher,pysqlcipher
From: 55446420

相关文章

  • 从 python 中的字符串列表中提取 def 定义函数的标签
    我想使用Python中的正常def过程创建函数,并将标签分配给从字符串列表中提取的命名空间。如何实现这一点?这个问题的动机:我正在创建一个与sympy兼容的python函数库,供数学家用于符号计算实验。许多函数需要初始化具有相关标签的多个对象的系统,这些标签分别由用户提供的字......
  • 在 Raspberry Pi 4 上使用 Python 从具有 SPI 连接的 MT6816 磁性编码器读取
    我对这个领域完全陌生,并不真正知道自己在做什么并且需要帮助。我正在尝试使用MT681614位磁性编码器通过RaspberryPi的SPI连接读取绝对角度。我有以下问题:在硬件方面,是否只是简单地连接必要的连接(3.3V、MOSI、MISO、SCK、GND、CE01)?对于编码......
  • PythonW 不运行脚本。严重地
    因此,使用Windows10和Python3.6。我创建了一个.py脚本,它可以使用命令pythonmyscript.py在命令提示符下正常运行,但是当我制作该脚本的精确副本并为其赋予扩展名.pyw,并尝试使用pythonw运行它时命令pythonwmyscript.pyw,什么也没有发生......
  • 如何使用Python和Selenium模拟产品购买以获取库存信息
    我正在开发一项网络抓取服务,主要针对时尚行业。我的目标是提供有关产品的全面数据,包括库存水平。为了实现这一目标,我需要模拟购买以确定每种尺寸的产品的最大可用数量。我一直在使用Python和Selenium进行网络抓取部分,但在准确模拟购买方面面临着挑战检索股票信息的过程。......
  • 连接Python套接字的问题
    当我写“关闭”时,我试图让我的电报机器人关闭计算机。我不想将机器人连接到网站上的托管。我选择我的手机(AndroidRedmiNote10)作为托管。我在上面安装了Termux和Pydroid。我写了两个文件:main到我的电脑,client到我的手机。通过在计算机上运行这两个文件,一切正常。但是,当我在......
  • 如何修复导入 Numexpr Python 时的错误
    在Windows10Python3.7.9(IDLE)上,我成功安装了“pipinstallnumexpr”,但在“importnumexprasne”时出现错误:Traceback(最近一次调用):文件“<pyshell#21>”,第267行,位于将numexpr导入为ne文件“C:\Python379\lib\site-packages\numexpr_init_.py”......
  • 让 cpython 优化恒定条件
    我正在用Python编写需要尽可能高效运行的代码,但有时我需要深入挖掘调试语句。不要注释这些输入或输出(或者使用外部预处理器来处理代码,就像这里建议的那样Python相当于#ifdefDEBUG或这里如何在python中实现“#ifdef”?|||)我想在模块的开头定义一个变量......
  • 如何使用 for 循环在 python jupyter 笔记本中创建动态图?
    我正在学习本课关于用Python求解热方程。该课程指出,在求解热方程后,我们可以通过在循环中简单地调用pyplot.plot()来可视化解的动画图,其中下面的代码将动态绘制每次每个点的温度,从而得到一个动画情节(课程帖子中提供了动画情节的示例)。importnumpyfrommatplotlibi......
  • Python:动态爱心代码
    importrandomfrommathimportsin,cos,pi,logfromtkinterimport*CANVAS_WIDTH=640CANVAS_HEIGHT=480CANVAS_CENTER_X=CANVAS_WIDTH/2CANVAS_CENTER_Y=CANVAS_HEIGHT/2IMAGE_ENLARGE=11HEART_COLOR="#FF99CC"defcenter_......
  • 如何在 PYTHON 中查找输入数字的千位、百位、十位和个位中的数字?例如:256 有 6 个一、5
    num=int(input("Pleasegivemeanumber:"))print(num)thou=int((num//1000))print(thou)hun=int((num//100))print(hun)ten=int((num//10))print(ten)one=int((num//1))print(one)我尝试过这个,但它不起作用,我被困住了。代码几乎是正确的,但需......