You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置pytest导入_sqlite3.so,无需重复配置SQLite/SpatiaLite?

解决pytest找不到_sqlite3模块的配置方案

1. 用conftest.py统一配置模块搜索路径

在项目根目录创建conftest.py(pytest会自动加载该文件),添加代码将项目根目录加入Python模块搜索路径的最前端,确保优先加载本地的_sqlite3.so:

import sys
import os

# 获取项目根目录(即conftest.py所在目录)
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
# 将根目录插入搜索路径首位,强制优先加载本地的_sqlite3.so
sys.path.insert(0, PROJECT_ROOT)

如果你的_sqlite3.so存放在子目录(比如lib/),则把对应子目录路径插入:

sys.path.insert(0, os.path.join(PROJECT_ROOT, "lib"))

2. 兼容不同环境的导入逻辑

调整业务代码中的导入语句,做兼容处理,避免在有系统自带SQLite的环境中强制加载本地模块:

try:
    # 优先加载本地定制的_sqlite3.so
    import _sqlite3 as sqlite
except ModuleNotFoundError:
    #  fallback到系统自带的sqlite3
    import sqlite3 as sqlite

3. 用pytest.ini配置全局环境变量

在项目根目录创建pytest.ini,通过配置PYTHONPATH确保pytest运行时能找到根目录下的模块:

[pytest]
env =
    PYTHONPATH = .

4. 适配多架构的so文件(可选)

如果本地、Lambda、流水线的系统架构不同(比如x86_64和arm64),可以按架构拆分so文件目录,在conftest.py中自动匹配加载:

import sys
import os
import platform

PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
arch = platform.machine()

# 根据当前系统架构选择对应so文件目录
if arch == "x86_64":
    lib_path = os.path.join(PROJECT_ROOT, "lib_x86")
elif arch == "aarch64":
    lib_path = os.path.join(PROJECT_ROOT, "lib_arm")
else:
    raise RuntimeError(f"不支持的架构:{arch}")

sys.path.insert(0, lib_path)

内容的提问来源于stack exchange,提问作者user3559247

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 16:52:47