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

添加django.contrib.gis到INSTALLED_APPS时触发OSError错误求助

解决添加django.contrib.gis时出现的sqlite3_create_function_v2未定义符号错误

这种错误我碰到过好几次,本质上是你的系统里SQLite版本不达标,或者libspatialite依赖的SQLite版本和系统当前运行的SQLite版本不兼容导致的。sqlite3_create_function_v2是SQLite 3.7.17及以后版本才引入的函数,而你的系统要么装了更老的SQLite,要么libspatialite编译时用的是高版本SQLite,但运行时调用的却是低版本的。

下面是几个亲测有效的解决方法,按从易到难的顺序来:

方法一:直接升级系统的SQLite(Debian/Ubuntu系优先用这个)

  • 先检查当前SQLite版本,确认问题根源:
    sqlite3 --version
    
  • 如果输出的版本低于3.7.17,执行系统包更新:
    sudo apt update
    sudo apt install --upgrade sqlite3 libsqlite3-dev
    
  • 安装完成后再次执行sqlite3 --version,确认版本已经升到3.7.17以上

方法二:手动编译安装高版本SQLite(系统包升级无效时用)

有时候系统源里的SQLite版本还是不够新,这时候就得手动编译了:

  1. 下载最新稳定版的SQLite源码(这里以3.44.0为例,你可以换成最新版):
    wget https://www.sqlite.org/2023/sqlite-autoconf-3440000.tar.gz
    tar xzf sqlite-autoconf-3440000.tar.gz
    cd sqlite-autoconf-3440000
    
  2. 编译并安装到系统全局目录:
    ./configure --prefix=/usr/local
    make
    sudo make install
    
  3. 更新系统库缓存,让新安装的SQLite生效:
    sudo ldconfig
    
  4. 重新安装libspatialite,让它链接到新的SQLite:
    sudo apt remove libspatialite7 libspatialite-dev
    sudo apt install libspatialite7 libspatialite-dev
    

方法三:在虚拟环境中指定SQLite库路径(不想修改全局时用)

如果不想改动系统全局的SQLite,可以在虚拟环境里做局部配置:

  • 激活你的Django虚拟环境后,设置环境变量让Python优先使用高版本的SQLite:
    export LD_PRELOAD=/usr/local/lib/libsqlite3.so
    
  • 你也可以把这条命令加到虚拟环境的activate脚本末尾,这样每次激活虚拟环境时都会自动生效。

验证修复效果

完成上面任意一种方法后,建议先验证SQLite版本是否达标:
打开Python shell,执行以下代码:

import sqlite3
print(sqlite3.sqlite_version)

只要输出的版本≥3.7.17,再启动你的Django项目,应该就不会再出现那个未定义符号的错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:26:01