如何配置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
相关产品推荐
相关产品推荐

