Windows10 安装编译 pysqlcipher3-v1.2.1(基于Python3.11 与 SQLCipher v4.6.1)

Windows10 编译 pysqlcipher3-v1.2.1(基于Python3.11 与 SQLCipher v4.6.1)

说明:编译过程已经基于Python3.9Python3.11 做过验证,可正常编译。如要直接使用Python3.9Python3.1164位编译好的包直接安装,免除自己编译的麻烦 可移步到这里下载安装Python3.10请自行编译。

1.编译64位版本

第1步,编译准备

  1. 安装 Win64 OpenSSL 版本随意,安装时除了安装路径,其他都选项不做修改,安装后需要添加系统环境变量:OPENSSL_CONF=D:\Program Files\OpenSSL-Win64\bin\openssl.cfg
    image

  2. 对安装的OpenSSL 做一些修改,下面操作全在文件夹 D:\Program Files\OpenSSL-Win64\lib\VC\x64\MD中执行
    复制 libcrypto.deflibcrypto.lib 为副本,并修改副本名称为libeay32.deflibeay32.lib
    复制 libssl.deflibssl.lib 为副本,并修改副本名称为ssleay32.defssleay32.lib

  3. 将文件夹 D:\Program Files\OpenSSL-Win64\lib\VC\x64\MD中的全部文件,拷贝到文件夹 D:\Program Files\OpenSSL-Win64\lib
    image

第2步,编译SQLCipher

步骤请见 Windows10 编译 sqlcipher-4.10.0 这里不再赘述。请确保你已经编译SQLCipher v4.6.1,并获得sqlite3.csqlite3.h两个文件。


第3步,编译PySQLCipher3

  1. 下载pysqlcipher3,可直接克隆,或者下载压缩包。在 /pysqlcipher3 中创建文件夹 amalgamation,然后将上面中生成的sqlite3.csqlite3.h复制到 amalgamation中。

  2. 下载sqlite-amalgamation,我这里使用的是这个sqlite-amalgamation-3460100,下载解压后,复制其中的4个文件shell.c sqlite3.c sqlite.h sqliteext.h,并复制到/pysqlcipher3/src/python3/sqlcipher路径中,没有的文件夹则创建。

  3. 修改源代码,分别在./pysqlcipher3/src/python3文件夹中,找到cache.hprepare_protocol.h头文件,在其中头部增加定义#define MODULE_NAME "pysqlite"
    image

    image

  4. 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执行后
    image

    截图python setup.py install执行后
    image


第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 查看
image

image


2.编译32位版本,此处不演示

与编译64位版本是相同的,只需要注意OpenSSL 32位,且使用32位 的Python32位的 sqlcipher


3.虚拟环境使用

若需要在虚拟环境中使用pysqlcipher3,则需要在已安装的系统环境中的Lib\site-packages目录下,复制下面两个,到虚拟环境 venv\Lib\site-packages 目录下

  • 文件夹: pysqlcipher3-1.2.1-py3.11-win-amd64.egg
  • 文件:easy-install.pth

本文章的原文地址
GitHub主页

posted @ 2025-08-12 15:05  星尘的博客  阅读(199)  评论(0)    收藏  举报