Windows10 安装编译 pysqlcipher3-v1.2.1(基于Python3.11 与 SQLCipher v4.6.1)
Windows10 编译 pysqlcipher3-v1.2.1(基于Python3.11 与 SQLCipher v4.6.1)
说明:编译过程已经基于Python3.9 与 Python3.11 做过验证,可正常编译。如要直接使用Python3.9 与 Python3.11的64位编译好的包直接安装,免除自己编译的麻烦 可移步到这里下载安装。Python3.10请自行编译。
1.编译64位版本
第1步,编译准备
-
安装 Win64 OpenSSL 版本随意,安装时除了安装路径,其他都选项不做修改,安装后需要添加系统环境变量:
OPENSSL_CONF=D:\Program Files\OpenSSL-Win64\bin\openssl.cfg

-
对安装的
OpenSSL做一些修改,下面操作全在文件夹D:\Program Files\OpenSSL-Win64\lib\VC\x64\MD中执行
复制libcrypto.def和libcrypto.lib为副本,并修改副本名称为libeay32.def和libeay32.lib
复制libssl.def和libssl.lib为副本,并修改副本名称为ssleay32.def和ssleay32.lib -
将文件夹
D:\Program Files\OpenSSL-Win64\lib\VC\x64\MD中的全部文件,拷贝到文件夹D:\Program Files\OpenSSL-Win64\lib中

第2步,编译SQLCipher
步骤请见 Windows10 编译 sqlcipher-4.10.0 这里不再赘述。请确保你已经编译SQLCipher v4.6.1,并获得sqlite3.c和sqlite3.h两个文件。
第3步,编译PySQLCipher3
-
下载pysqlcipher3,可直接克隆,或者下载压缩包。在
/pysqlcipher3中创建文件夹amalgamation,然后将上面中生成的sqlite3.c和sqlite3.h复制到amalgamation中。 -
下载sqlite-amalgamation,我这里使用的是这个sqlite-amalgamation-3460100,下载解压后,复制其中的4个文件
shell.c sqlite3.c sqlite.h sqliteext.h,并复制到/pysqlcipher3/src/python3/sqlcipher路径中,没有的文件夹则创建。 -
修改源代码,分别在
./pysqlcipher3/src/python3文件夹中,找到cache.h与prepare_protocol.h头文件,在其中头部增加定义#define MODULE_NAME "pysqlite"


-
在
cmd中,执行下的操作:我这里使用Python 3.11.9 64bit做演示# 切换到 pysqlcipher3 cd /d H:\Projects\pysqlcipher3 python setup.py clean python setup.py build_amalgamation python setup.py install截图
python setup.py build_amalgamation执行后

截图
python setup.py install执行后

第3步,验证编译结果
使用下列代码测试不报错,并输出[('2006-01-05', 'BUY', 'RHAT', 100.0, 35.14)]
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""
@ File : test.py
@ Version : V1.0.0
@ Description :
"""
from pysqlcipher3 import dbapi2 as sqlite
conn1 = sqlite.connect("test.db")
c1 = conn1.cursor()
c1.execute("PRAGMA key='123456'")
c1.execute("""create table stocks (date text, trans text, symbol text, qty real, price real)""")
c1.execute("""insert into stocks values ('2006-01-05','BUY','RHAT',100,35.14)""")
conn1.commit()
c1.close()
conn2 = sqlite.connect("test.db")
c2 = conn2.cursor()
c2.execute("PRAGMA key='123456'")
print(c2.execute("""select * from stocks""").fetchall())
c2.close()
还可使用 DB.Browser.for.SQLite 查看


2.编译32位版本,此处不演示
与编译64位版本是相同的,只需要注意OpenSSL 32位,且使用32位 的Python 与 32位的 sqlcipher
3.虚拟环境使用
若需要在虚拟环境中使用pysqlcipher3,则需要在已安装的系统环境中的Lib\site-packages目录下,复制下面两个,到虚拟环境 venv\Lib\site-packages 目录下
- 文件夹:
pysqlcipher3-1.2.1-py3.11-win-amd64.egg - 文件:
easy-install.pth
本文来自博客园作者:星尘的博客,转载请注明出处:https://www.cnblogs.com/yqbaowo/p/19033812

浙公网安备 33010602011771号