1. 环境准备搭建Windows编译环境在Windows上编译pysqlcipher3需要先准备好完整的开发工具链。我建议使用Python 3.7版本这个版本在兼容性和稳定性方面表现最好。虽然新版本Python功能更丰富但在编译第三方模块时经常会遇到各种兼容性问题特别是需要C扩展的模块。安装Visual Studio 2022时只需要选择使用C的桌面开发组件即可。这个组件包含了我们需要的编译器和工具链。安装过程可能会比较耗时下载约3GB安装后占用10GB左右空间。记得勾选MSVC v143 - VS 2022 C x64/x86生成工具和Windows 10 SDK这两个关键组件。OpenSSL的安装需要特别注意版本问题。当前最新稳定版是1.1.1t这个版本与之前的1.0.x系列有很大区别特别是库文件名称发生了变化。安装完成后建议将OpenSSL的bin目录添加到系统PATH环境变量中或者将必要的dll文件复制到项目目录下。Tcl的安装经常被忽略但它是SQLite编译的必备依赖。可以从ActiveState官网下载Windows 64位版本。安装完成后Tcl的include目录路径需要记下来后续编译会用到。2. 依赖库配置与问题排查OpenSSL的配置是最容易出问题的环节。我遇到过无数次Fatal error: OpenSSL could not be detected!的错误。经过分析setup.py源码发现程序会检查OPENSSL_CONF环境变量。这个变量需要指向OpenSSL的配置文件openssl.cfg的完整路径。解决方法是在系统环境变量中添加OPENSSL_CONFC:\OpenSSL-Win64\bin\openssl.cfg另一个常见问题是找不到sqlite3.h和sqlite3.c文件。这是因为pysqlcipher3需要SQLCipher的合并源码文件。有两种解决方案直接从SQLite官网下载合并源码包但这种方法可能会导致加密功能不完整从SQLCipher源码编译生成这两个文件这是推荐的做法编译SQLCipher时需要使用Visual Studio的x64 Native Tools命令行工具。执行以下命令git clone https://github.com/sqlcipher/sqlcipher.git cd sqlcipher nmake /f Makefile.msc如果遇到无法打开包括文件sqlcipher/sqlite3.h错误需要在amalgamation目录下创建sqlcipher子目录并将sqlite3.h复制一份到该目录中。3. 编译过程中的典型错误处理链接错误LNK1181: 无法打开输入文件libeay32.lib是OpenSSL 1.1.x版本特有的问题。从1.1.0开始OpenSSL将库文件重命名了libeay32.dll → libcrypto.dllssleay32.dll → libssl.dll解决方法有两种创建符号链接或直接复制文件copy libcrypto.lib libeay32.lib copy libssl.lib ssleay32.lib修改setup.py文件将libeay32.lib替换为libcrypto.lib更复杂的错误是编译过程中出现failed with exit code 2。这通常是由于MODULE_NAME宏定义问题导致的。检查setup.py中的define_macros定义define_macros [(MODULE_NAME, quote_argument(PACKAGE_NAME .dbapi2))]需要将所有.c文件中的MODULE_NAME替换为pysqlcipher3.dbapi2。主要修改的文件包括src/python3/cache.csrc/python3/connection.csrc/python3/cursor.csrc/python3/prepare_protocol.csrc/python3/row.csrc/python3/statement.csrc/python3/util.c4. 完整编译与安装流程准备好所有依赖后可以开始正式编译。首先确保在项目根目录下存在amalgamation目录并且包含以下文件sqlite3.csqlite3.hsqlcipher/sqlite3.h (通过复制得到)执行编译命令python setup.py build_amalgamation编译成功后安装模块python setup.py install验证安装是否成功pip list | findstr pysqlcipher3应该能看到类似输出pysqlcipher3 1.2.0如果需要在虚拟环境中使用建议先在基础环境中编译好再将生成的模块文件复制到虚拟环境中。虚拟环境直接编译经常会遇到各种路径和依赖问题。编译完成后可以通过简单测试验证加密功能是否正常工作import pysqlcipher3.dbapi2 as sqlite conn sqlite.connect(test.db) conn.execute(PRAGMA keytestkey) conn.execute(CREATE TABLE test (id INTEGER PRIMARY KEY, name TEXT)) conn.execute(INSERT INTO test (name) VALUES (测试数据)) conn.commit()如果能够正常创建加密数据库并执行操作说明pysqlcipher3已经正确安装并可以正常使用。
Windows 下 pysqlcipher3 编译安装全攻略:从环境配置到填坑指南
1. 环境准备搭建Windows编译环境在Windows上编译pysqlcipher3需要先准备好完整的开发工具链。我建议使用Python 3.7版本这个版本在兼容性和稳定性方面表现最好。虽然新版本Python功能更丰富但在编译第三方模块时经常会遇到各种兼容性问题特别是需要C扩展的模块。安装Visual Studio 2022时只需要选择使用C的桌面开发组件即可。这个组件包含了我们需要的编译器和工具链。安装过程可能会比较耗时下载约3GB安装后占用10GB左右空间。记得勾选MSVC v143 - VS 2022 C x64/x86生成工具和Windows 10 SDK这两个关键组件。OpenSSL的安装需要特别注意版本问题。当前最新稳定版是1.1.1t这个版本与之前的1.0.x系列有很大区别特别是库文件名称发生了变化。安装完成后建议将OpenSSL的bin目录添加到系统PATH环境变量中或者将必要的dll文件复制到项目目录下。Tcl的安装经常被忽略但它是SQLite编译的必备依赖。可以从ActiveState官网下载Windows 64位版本。安装完成后Tcl的include目录路径需要记下来后续编译会用到。2. 依赖库配置与问题排查OpenSSL的配置是最容易出问题的环节。我遇到过无数次Fatal error: OpenSSL could not be detected!的错误。经过分析setup.py源码发现程序会检查OPENSSL_CONF环境变量。这个变量需要指向OpenSSL的配置文件openssl.cfg的完整路径。解决方法是在系统环境变量中添加OPENSSL_CONFC:\OpenSSL-Win64\bin\openssl.cfg另一个常见问题是找不到sqlite3.h和sqlite3.c文件。这是因为pysqlcipher3需要SQLCipher的合并源码文件。有两种解决方案直接从SQLite官网下载合并源码包但这种方法可能会导致加密功能不完整从SQLCipher源码编译生成这两个文件这是推荐的做法编译SQLCipher时需要使用Visual Studio的x64 Native Tools命令行工具。执行以下命令git clone https://github.com/sqlcipher/sqlcipher.git cd sqlcipher nmake /f Makefile.msc如果遇到无法打开包括文件sqlcipher/sqlite3.h错误需要在amalgamation目录下创建sqlcipher子目录并将sqlite3.h复制一份到该目录中。3. 编译过程中的典型错误处理链接错误LNK1181: 无法打开输入文件libeay32.lib是OpenSSL 1.1.x版本特有的问题。从1.1.0开始OpenSSL将库文件重命名了libeay32.dll → libcrypto.dllssleay32.dll → libssl.dll解决方法有两种创建符号链接或直接复制文件copy libcrypto.lib libeay32.lib copy libssl.lib ssleay32.lib修改setup.py文件将libeay32.lib替换为libcrypto.lib更复杂的错误是编译过程中出现failed with exit code 2。这通常是由于MODULE_NAME宏定义问题导致的。检查setup.py中的define_macros定义define_macros [(MODULE_NAME, quote_argument(PACKAGE_NAME .dbapi2))]需要将所有.c文件中的MODULE_NAME替换为pysqlcipher3.dbapi2。主要修改的文件包括src/python3/cache.csrc/python3/connection.csrc/python3/cursor.csrc/python3/prepare_protocol.csrc/python3/row.csrc/python3/statement.csrc/python3/util.c4. 完整编译与安装流程准备好所有依赖后可以开始正式编译。首先确保在项目根目录下存在amalgamation目录并且包含以下文件sqlite3.csqlite3.hsqlcipher/sqlite3.h (通过复制得到)执行编译命令python setup.py build_amalgamation编译成功后安装模块python setup.py install验证安装是否成功pip list | findstr pysqlcipher3应该能看到类似输出pysqlcipher3 1.2.0如果需要在虚拟环境中使用建议先在基础环境中编译好再将生成的模块文件复制到虚拟环境中。虚拟环境直接编译经常会遇到各种路径和依赖问题。编译完成后可以通过简单测试验证加密功能是否正常工作import pysqlcipher3.dbapi2 as sqlite conn sqlite.connect(test.db) conn.execute(PRAGMA keytestkey) conn.execute(CREATE TABLE test (id INTEGER PRIMARY KEY, name TEXT)) conn.execute(INSERT INTO test (name) VALUES (测试数据)) conn.commit()如果能够正常创建加密数据库并执行操作说明pysqlcipher3已经正确安装并可以正常使用。