编译静态链接pysqlite3库后导入失败问题求助
解决pysqlite3静态编译后导入失败(ModuleNotFoundError: pysqlite3._sqlite3)的问题
问题原因
你编译生成的_sqlite3.cpython-312-darwin.so位于build/lib.macosx-14.0-arm64-cpython-312/pysqlite3/目录下,但当前Python的sys.path优先加载的是系统site-packages里的pysqlite3包(或者你当前工作目录下的pysqlite3源码目录),这些目录里并没有编译好的C扩展模块,导致导入失败。
解决方案
1. 安装编译好的版本到Python的site-packages
执行以下命令,将静态编译的pysqlite3安装到Python的全局包目录:
# 先卸载已有的pysqlite3(避免冲突) pip uninstall -y pysqlite3 # 执行静态编译并安装 python setup.py build_static install
安装完成后,Python会直接从site-packages加载包含C扩展的pysqlite3模块,无需额外配置。
2. 临时测试:手动添加build目录到sys.path
如果只是临时测试,不想全局安装,可以在你的测试脚本开头添加以下代码,让Python优先加载build目录下的编译好的模块:
import sys # 替换为你实际的build/lib路径 sys.path.insert(0, '/Users/username/Sandbox/sqlite3ttt/pysqlite3/build/lib.macosx-14.0-arm64-cpython-312') from pysqlite3 import dbapi2 as sqlite3 # 测试代码 conn = sqlite3.connect(':memory:') print("SQLite版本:", conn.execute("select sqlite_version()").fetchone()[0])
3. 避免本地目录干扰
不要在pysqlite3源码目录下直接运行测试脚本(你的脚本路径/Users/username/Sandbox/sqlite3ttt/pysqlite3/a.py就在源码目录里),Python会优先加载当前目录下的pysqlite3源码文件夹,而这个文件夹里没有编译好的_sqlite3扩展模块。可以把测试脚本移到源码目录外,再执行。
内容的提问来源于stack exchange,提问作者estranged
相关产品推荐
相关产品推荐

