【问题排查】SQLite安装失败

news2025/4/17 11:20:27

启动 Django 自带的开发服务器

python manage.py runserver

出现如下报错:

[root@iZ2zedudtf2cwzi9argky2Z myproject]# python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
Exception in thread django-main-thread:
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/django/db/backends/base/base.py", line 279, in ensure_connection
    self.connect()
  File "/usr/local/lib/python3.11/site-packages/django/utils/asyncio.py", line 26, in inner
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/django/db/backends/base/base.py", line 256, in connect
    self.connection = self.get_new_connection(conn_params)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/django/utils/asyncio.py", line 26, in inner
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/django/db/backends/sqlite3/base.py", line 207, in get_new_connection
    register_functions(conn)
  File "/usr/local/lib/python3.11/site-packages/django/db/backends/sqlite3/_functions.py", line 45, in register
    create_deterministic_function("django_date_extract", 2, _sqlite_datetime_extract)
sqlite3.NotSupportedError: deterministic=True requires SQLite 3.8.3 or higher

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/lib/python3.11/threading.py", line 1038, in _bootstrap_inner
    self.run()
  File "/usr/local/lib/python3.11/threading.py", line 975, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/local/lib/python3.11/site-packages/django/utils/autoreload.py", line 64, in wrapper
    fn(*args, **kwargs)
  File "/usr/local/lib/python3.11/site-packages/django/core/management/commands/runserver.py", line 137, in inner_run
    self.check_migrations()
  File "/usr/local/lib/python3.11/site-packages/django/core/management/base.py", line 587, in check_migrations
    executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS])
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/django/db/migrations/executor.py", line 18, in __init__
    self.loader = MigrationLoader(self.connection)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/django/db/migrations/loader.py", line 58, in __init__
    self.build_graph()
  File "/usr/local/lib/python3.11/site-packages/django/db/migrations/loader.py", line 235, in build_graph
    self.applied_migrations = recorder.applied_migrations()
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/django/db/migrations/recorder.py", line 89, in applied_migrations
    if self.has_table():
       ^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/django/db/migrations/recorder.py", line 63, in has_table
    with self.connection.cursor() as cursor:
         ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/django/utils/asyncio.py", line 26, in inner
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/django/db/backends/base/base.py", line 320, in cursor
    return self._cursor()
           ^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/django/db/backends/base/base.py", line 296, in _cursor
    self.ensure_connection()
  File "/usr/local/lib/python3.11/site-packages/django/utils/asyncio.py", line 26, in inner
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/django/db/backends/base/base.py", line 278, in ensure_connection
    with self.wrap_database_errors:
  File "/usr/local/lib/python3.11/site-packages/django/db/utils.py", line 91, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/usr/local/lib/python3.11/site-packages/django/db/backends/base/base.py", line 279, in ensure_connection
    self.connect()
  File "/usr/local/lib/python3.11/site-packages/django/utils/asyncio.py", line 26, in inner
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/django/db/backends/base/base.py", line 256, in connect
    self.connection = self.get_new_connection(conn_params)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/django/utils/asyncio.py", line 26, in inner
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/django/db/backends/sqlite3/base.py", line 207, in get_new_connection
    register_functions(conn)
  File "/usr/local/lib/python3.11/site-packages/django/db/backends/sqlite3/_functions.py", line 45, in register
    create_deterministic_function("django_date_extract", 2, _sqlite_datetime_extract)
django.db.utils.NotSupportedError: deterministic=True requires SQLite 3.8.3 or higher

从错误信息来看,问题的核心是 Django 使用的 SQLite 数据库版本过低。
具体来说,Django 需要 SQLite 3.8.3 或更高版本,而系统中安装的 SQLite 版本低于这个要求。

  1. 检查当前 SQLite 版本
    运行以下命令检查系统中 SQLite 的版本:
[root@iZ2zedudtf2cwzi9argky2Z myproject]# sqlite3 --version
3.7.17 2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668

输出的版本号低于 3.8.3,则需要升级 SQLite。

  1. 升级 SQLite:通过源码编译安装最新版本
    访问SQLite 官方网站下载最新的源码包。
    sqlite-autoconf-3490100.tar.gz

解压源码包

[root@iZ2zedudtf2cwzi9argky2Z myproject]# cd /root/opt
[root@iZ2zedudtf2cwzi9argky2Z opt]# ll
总用量 244100
-rw-r--r--  1 root root 34557312 311 13:48 containerd.io-1.6.9-3.1.el7.x86_64.rpm
-rw-r--r--  1 root root    40816 311 15:31 container-selinux-2.119.2-1.911c772.el7_8.noarch.rpm
drwxr-xr-x  3 root root     4096 311 17:24 dify
-rw-r--r--  1 root root 50923520 311 16:39 dify-1.0.0.tar
drwxr-xr-x 10 root root     4096 311 17:23 dify-main
-rw-r--r--  1 root root 22021294 311 17:20 dify-main.zip
-rw-r--r--  1 root root 28596976 311 13:48 docker-ce-26.1.4-1.el7.x86_64.rpm
-rw-r--r--  1 root root 15445372 311 13:48 docker-ce-cli-26.1.4-1.el7.x86_64.rpm
-rw-r--r--  1 root root 73691062 311 11:17 docker-compose-linux-x86_64
-rw-r--r--  1 root root       94 311 14:36 docker-compose-linux-x86_64.sha256
-rw-r--r--  1 root root 14058416 311 13:49 docker-compose-plugin-2.27.1-1.el7.x86_64.rpm
-rw-r--r--  1 root root  7367636 311 13:49 docker-compose-plugin-2.6.0-3.el7.x86_64.rpm
-rw-r--r--  1 root root      318 311 16:51 docker-compose.yml
-rw-r--r--  1 root root  3226385 49 10:25 sqlite-autoconf-3490100.tar.gz
[root@iZ2zedudtf2cwzi9argky2Z opt]# tar xvfz sqlite-autoconf-3490100.tar.gz 
sqlite-autoconf-3490100/
sqlite-autoconf-3490100/sqlite3.c
sqlite-autoconf-3490100/sqlite3.rc
sqlite-autoconf-3490100/Makefile.msc
sqlite-autoconf-3490100/sqlite3.1
sqlite-autoconf-3490100/auto.def
sqlite-autoconf-3490100/Makefile.in
sqlite-autoconf-3490100/autosetup/
sqlite-autoconf-3490100/autosetup/jimsh0.c
sqlite-autoconf-3490100/autosetup/system.tcl
sqlite-autoconf-3490100/autosetup/pkg-config.tcl
sqlite-autoconf-3490100/autosetup/autosetup-config.sub
sqlite-autoconf-3490100/autosetup/cc.tcl
sqlite-autoconf-3490100/autosetup/LICENSE
sqlite-autoconf-3490100/autosetup/autosetup
sqlite-autoconf-3490100/autosetup/sqlite-config.tcl
sqlite-autoconf-3490100/autosetup/proj.tcl
sqlite-autoconf-3490100/autosetup/cc-db.tcl
sqlite-autoconf-3490100/autosetup/README.autosetup
sqlite-autoconf-3490100/autosetup/cc-lib.tcl
sqlite-autoconf-3490100/autosetup/autosetup-config.guess
sqlite-autoconf-3490100/autosetup/autosetup-test-tclsh
sqlite-autoconf-3490100/autosetup/README.md
sqlite-autoconf-3490100/autosetup/autosetup-find-tclsh
sqlite-autoconf-3490100/autosetup/cc-shared.tcl
sqlite-autoconf-3490100/VERSION
sqlite-autoconf-3490100/Makefile.fallback
sqlite-autoconf-3490100/shell.c
sqlite-autoconf-3490100/sqlite3.h
sqlite-autoconf-3490100/README.txt
sqlite-autoconf-3490100/tea/
sqlite-autoconf-3490100/tea/tclconfig/
sqlite-autoconf-3490100/tea/tclconfig/tcl.m4
sqlite-autoconf-3490100/tea/tclconfig/install-sh
sqlite-autoconf-3490100/tea/Makefile.in
sqlite-autoconf-3490100/tea/aclocal.m4
sqlite-autoconf-3490100/tea/win/
sqlite-autoconf-3490100/tea/win/rules-ext.vc
sqlite-autoconf-3490100/tea/win/makefile.vc
sqlite-autoconf-3490100/tea/win/targets.vc
sqlite-autoconf-3490100/tea/win/nmakehlp.c
sqlite-autoconf-3490100/tea/win/rules.vc
sqlite-autoconf-3490100/tea/README.txt
sqlite-autoconf-3490100/tea/configure.ac
sqlite-autoconf-3490100/tea/doc/
sqlite-autoconf-3490100/tea/doc/sqlite3.n
sqlite-autoconf-3490100/tea/pkgIndex.tcl.in
sqlite-autoconf-3490100/tea/configure
sqlite-autoconf-3490100/tea/license.terms
sqlite-autoconf-3490100/tea/generic/
sqlite-autoconf-3490100/tea/generic/tclsqlite3.c
sqlite-autoconf-3490100/sqlite3ext.h
sqlite-autoconf-3490100/configure
sqlite-autoconf-3490100/Replace.cs
sqlite-autoconf-3490100/sqlite3rc.h
sqlite-autoconf-3490100/sqlite3.pc.in
[root@iZ2zedudtf2cwzi9argky2Z opt]# ll
总用量 244104
-rw-r--r--  1 root            root            34557312 311 13:48 containerd.io-1.6.9-3.1.el7.x86_64.rpm
-rw-r--r--  1 root            root               40816 311 15:31 container-selinux-2.119.2-1.911c772.el7_8.noarch.rpm
drwxr-xr-x  3 root            root                4096 311 17:24 dify
-rw-r--r--  1 root            root            50923520 311 16:39 dify-1.0.0.tar
drwxr-xr-x 10 root            root                4096 311 17:23 dify-main
-rw-r--r--  1 root            root            22021294 311 17:20 dify-main.zip
-rw-r--r--  1 root            root            28596976 311 13:48 docker-ce-26.1.4-1.el7.x86_64.rpm
-rw-r--r--  1 root            root            15445372 311 13:48 docker-ce-cli-26.1.4-1.el7.x86_64.rpm
-rw-r--r--  1 root            root            73691062 311 11:17 docker-compose-linux-x86_64
-rw-r--r--  1 root            root                  94 311 14:36 docker-compose-linux-x86_64.sha256
-rw-r--r--  1 root            root            14058416 311 13:49 docker-compose-plugin-2.27.1-1.el7.x86_64.rpm
-rw-r--r--  1 root            root             7367636 311 13:49 docker-compose-plugin-2.6.0-3.el7.x86_64.rpm
-rw-r--r--  1 root            root                 318 311 16:51 docker-compose.yml
drwxrwxr-x  4 ecs-assist-user ecs-assist-user     4096 218 22:09 sqlite-autoconf-3490100
-rw-r--r--  1 root            root             3226385 49 10:25 sqlite-autoconf-3490100.tar.gz

配置、编译并安装
执行脚本./configure --prefix=/usr/local

  • 作用:
    ./configure 是一个脚本,用于检查系统环境和配置选项。
    它会生成一个适合当前系统的 Makefile 文件,供后续编译使用。
    --prefix=/usr/local指定了软件安装的目标路径为 /usr/local,这是常见的第三方软件安装目录。
  • 常见选项:
    • --prefix=DIR: 指定软件安装目录。
    • --enable-FEATURE: 启用某个功能模块。
    • --disable-FEATURE: 禁用某个功能模块。
    • --with-PACKAGE: 指定依赖库的位置。
  • 可能的错误:
    如果缺少依赖库或工具(如编译器、头文件等),./configure 可能会失败,提示缺失的组件。
[root@iZ2zedudtf2cwzi9argky2Z sqlite-autoconf-3490100]# ./configure --prefix=/usr/local
Host System...x86_64-pc-linux-gnu
Build System...x86_64-pc-linux-gnu
C compiler... cc  
C++ compiler... c++  
Build C compiler...cc
Checking for stdlib.h...ok
Source dir = /root/opt/sqlite-autoconf-3490100
Build dir  = /root/opt/sqlite-autoconf-3490100
Configuring SQLite version 3.49.1
Looking for install ... /usr/bin/install
Checking for int8_t...ok
Checking for int16_t...ok
Checking for int32_t...ok
Checking for int64_t...ok
Checking for intptr_t...ok
Checking for uint8_t...ok
Checking for uint16_t...ok
Checking for uint32_t...ok
Checking for uint64_t...ok
Checking for uintptr_t...ok
Checking for gmtime_r...ok
Checking for isnan...ok
Checking for localtime_r...ok
Checking for localtime_s...not found
Checking for malloc_usable_size...ok
Checking for strchrnul...ok
Checking for usleep...ok
Checking for utime...ok
Checking for pread...ok
Checking for pread64...ok
Checking for pwrite...ok
Checking for pwrite64...ok
Checking libs for fdatasync...none needed
Checking libs for nanosleep...none needed
Checking for sys/types.h...ok
Checking for sys/stat.h...ok
Checking for dlfcn.h...ok
Checking for unistd.h...ok
Checking for stdlib.h...(cached) ok
Checking for malloc.h...ok
Checking for memory.h...ok
Checking for string.h...ok
Checking for strings.h...ok
Checking for inttypes.h...ok
Checking for zlib.h...ok
Checking libs for deflate...-lz
Checking whether the C compiler accepts -rpath /usr/local/lib...no
Checking whether the C compiler accepts -Wl,-rpath,/usr/local/lib...yes
SQLITE_DEBUG build? no
Support threadsafe operation? Checking for libs...
Checking libs for pthread_create...-lpthread
Checking libs for pthread_mutexattr_init...-lpthread
Checking for line-editing capability...
Checking libs for tgetent...-lncurses
Checking libs for readline...-lreadline
Using readline flags: -I/usr/include -lreadline -lncurses
Line-editing support for the sqlite3 shell: readline
Checking libs for dlopen...-ldl
Loadable extension support enabled.
Checking libs for ceil...-lm
Enabling math SQL functions -lm
ICU support is disabled.
Feature flags...
  - fts4
  - fts5
  - geopoly
  - rtree
  - session
  - update-limit
  - memsys5
  - memsys3
  - scanstatus
  + json
Library feature flags: -DSQLITE_ENABLE_MATH_FUNCTIONS -DSQLITE_THREADSAFE=1
Shell options: -DHAVE_READLINE=1 -DSQLITE_HAVE_ZLIB=1
Created Makefile from Makefile.in
Created sqlite3.pc from sqlite3.pc.in
Created sqlite_cfg.h

执行命令:make

  • 作用:
    • 根据 ./configure 生成的 Makefile 文件,调用编译器(如 gccclang)对源代码进行编译。
    • 编译完成后,生成可执行文件或库文件。
  • 多核加速:
    • 如果你的 CPU 有多个核心,可以使用 make -jN(例如 make -j4)来并行编译,加快速度。
  • 可能的错误:
    • 缺少依赖库或头文件。
    • 编译器版本不兼容。
    • 源代码中有语法错误或其他问题。
[root@iZ2zedudtf2cwzi9argky2Z sqlite-autoconf-3490100]# make
cc -c /root/opt/sqlite-autoconf-3490100/sqlite3.c -o sqlite3.o -O2 -g  -I. -fPIC  -DSQLITE_ENABLE_MATH_FUNCTIONS -DSQLITE_THREADSAFE=1
cc -o libsqlite3.so  sqlite3.o -shared \
	 -Wl,-rpath,/usr/local/lib -lpthread -lm -ldl -lz    \
	 
ar cr libsqlite3.a sqlite3.o
cc -o sqlite3 \
	/root/opt/sqlite-autoconf-3490100/shell.c /root/opt/sqlite-autoconf-3490100/sqlite3.c -Wl,-rpath,/usr/local/lib -lpthread -lm -ldl -lz    \
	-I. -DSQLITE_ENABLE_MATH_FUNCTIONS -DSQLITE_THREADSAFE=1 -DHAVE_READLINE=1 -DSQLITE_HAVE_ZLIB=1 \
	-O2 -g  -I/usr/include  \
	 -lreadline -lncurses

执行命令:sudo make install

  • 作用:
    • 将编译生成的文件(如可执行文件、库文件、配置文件等)复制到指定的安装目录(如 /usr/local)。
    • 需要管理员权限(sudo),因为默认安装路径通常是系统目录。
  • 注意事项:
    • 安装后可能会覆盖系统中已有的文件,请谨慎操作。
    • 如果不想使用 sudo,可以在 ./configure时指定用户目录(如 --prefix=$HOME/myapp)。
[root@iZ2zedudtf2cwzi9argky2Z sqlite-autoconf-3490100]# sudo make install
/usr/bin/install libsqlite3.so "/usr/local/lib"
Setting up libsqlite3.so version symlinks...
lrwxrwxrwx 1 root root      20 49 10:38 libsqlite3.so -> libsqlite3.so.3.49.1
lrwxrwxrwx 1 root root      20 49 10:38 libsqlite3.so.0 -> libsqlite3.so.3.49.1
-rwxr-xr-x 1 root root 4575296 49 10:38 libsqlite3.so.3.49.1
/usr/bin/install -m 0644 libsqlite3.a "/usr/local/lib"
/usr/bin/install -s sqlite3 "/usr/local/bin"
/usr/bin/install -m 0644 /root/opt/sqlite-autoconf-3490100/sqlite3.h /root/opt/sqlite-autoconf-3490100/sqlite3ext.h "/usr/local/include"
/usr/bin/install -m 0644 sqlite3.pc "/usr/local/lib/pkgconfig"
/usr/bin/install -m 0644 /root/opt/sqlite-autoconf-3490100/sqlite3.1 "/usr/local/share/man/man1"

验证安装
安装完成后,再次检查 SQLite 版本:

[root@iZ2zedudtf2cwzi9argky2Z sqlite-autoconf-3490100]# sqlite3 --version
3.7.17 2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668

如果输出的是最新版本号,则说明安装成功。

从操作结果来看,虽然已经成功编译并安装了最新版本的 SQLite(3.49.1),但系统仍然显示旧版本(3.7.17)。
这表明系统默认的 sqlite3 二进制文件没有被新版本替换,或者系统路径中优先使用了旧版本。

以下是解决这个问题的步骤:
运行以下命令,检查 sqlite3 可执行文件的位置:
如果输出类似于 /usr/bin/sqlite3,说明系统仍在使用默认安装的旧版本。而刚刚安装的新版本应该位于 /usr/local/bin/sqlite3。

[root@iZ2zedudtf2cwzi9argky2Z sqlite-autoconf-3490100]# which sqlite3
/usr/local/bin/sqlite3

从操作结果来看,which sqlite3 的输出是 /usr/local/bin/sqlite3,这表明系统已经正确指向了你刚刚安装的新版本 SQLite(3.49.1)
然而,运行 sqlite3 --version 时仍然显示旧版本(3.7.17)。
这种情况可能是由于以下原因之一:

存在多个 SQLite 二进制文件:虽然 which sqlite3 显示的是 /usr/local/bin/sqlite3,但可能有其他路径中的旧版本被优先调用。
动态链接库未更新:
即使 sqlite3 可执行文件是最新的,系统可能仍在使用旧的 SQLite 动态链接库。

检查所有 sqlite3 可执行文件
运行以下命令,查找系统中所有的 sqlite3 文件:

[root@iZ2zedudtf2cwzi9argky2Z sqlite-autoconf-3490100]# whereis sqlite3
sqlite3: /usr/bin/sqlite3 /usr/local/bin/sqlite3 /usr/include/sqlite3.h /usr/share/man/man1/sqlite3.1.gz

或者更详细地查找:

[root@iZ2zedudtf2cwzi9argky2Z sqlite-autoconf-3490100]# find / -name sqlite3 2>/dev/null
/root/opt/sqlite-autoconf-3490100/sqlite3
/usr/lib64/python2.7/sqlite3
/usr/lib64/python3.6/sqlite3
/usr/src/Python-3.11.0/Lib/sqlite3
/usr/src/Python-3.11.0/Doc/includes/sqlite3
/usr/local/aegis/PythonLoader/lib/python2.7/sqlite3
/usr/local/lib/python3.11/site-packages/django/db/backends/sqlite3
/usr/local/lib/python3.11/sqlite3
/usr/local/bin/sqlite3
/usr/bin/sqlite3

从操作结果来看,系统中确实存在多个 sqlite3 文件。
以下是关键信息的总结和解决方法:

系统中存在两个主要的 sqlite3 可执行文件

  • /usr/local/bin/sqlite3:这是你刚刚安装的新版本 SQLite(3.49.1)
  • /usr/bin/sqlite3:这是系统默认的旧版本 SQLite(3.7.17)

尽管 which sqlite3 显示的是 /usr/local/bin/sqlite3,但可能由于某些原因,运行 sqlite3 --version 时仍然调用了旧版本。

检查动态链接库路径
为了确认问题是否出在动态链接库上,我们需要检查 sqlite3 使用的动态链接库。

查看当前使用的动态链接库
运行以下命令:
如果显示的路径是 /usr/lib 或其他路径中的旧版本库(如 /usr/lib64/libsqlite3.so.0),说明系统仍然在使用旧的动态链接库。

[root@iZ2zedudtf2cwzi9argky2Z sqlite-autoconf-3490100]# ldd $(which sqlite3)
	linux-vdso.so.1 =>  (0x00007ffe6b86e000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fd0e865a000)
	libm.so.6 => /lib64/libm.so.6 (0x00007fd0e8358000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007fd0e8154000)
	libz.so.1 => /lib64/libz.so.1 (0x00007fd0e7f3e000)
	libreadline.so.6 => /lib64/libreadline.so.6 (0x00007fd0e7cf8000)
	libncurses.so.5 => /lib64/libncurses.so.5 (0x00007fd0e7ad1000)
	libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007fd0e78a7000)
	libc.so.6 => /lib64/libc.so.6 (0x00007fd0e74d9000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fd0e8876000)

从 ldd 输出结果来看,动态链接库中缺少对 libsqlite3.so 的引用。
这表明当前的 sqlite3 可执行文件可能没有正确链接到 SQLite 的动态库,或者系统仍然在使用旧版本的 SQLite 动态库。

检查 /usr/local/lib 中的动态链接库
你之前已经编译并安装了新版 SQLite(3.49.1),其动态链接库应该位于 /usr/local/lib。运行以下命令,确认该目录下是否存在 libsqlite3.so 文件:

[root@iZ2zedudtf2cwzi9argky2Z sqlite-autoconf-3490100]# ls -l /usr/local/lib | grep libsqlite3
-rw-r--r--  1 root root 10685798 49 10:38 libsqlite3.a
lrwxrwxrwx  1 root root       20 49 10:38 libsqlite3.so -> libsqlite3.so.3.49.1
lrwxrwxrwx  1 root root       20 49 10:38 libsqlite3.so.0 -> libsqlite3.so.3.49.1
-rwxr-xr-x  1 root root  4575296 49 10:38 libsqlite3.so.3.49.1

输出来看,/usr/local/lib 目录下确实存在正确版本的 SQLite 动态链接库(3.49.1)。
然而,在运行 ldd $(which sqlite3) 时没有显示出对 libsqlite3.so 的引用,这意味着 sqlite3 可执行文件可能没有正确链接到这些库。

接下来可以按照以下步骤进行操作以确保 sqlite3 使用新版本的动态链接库:

  1. 更新动态链接器缓存
    首先,确认 /usr/local/lib 已经添加到动态链接器配置中,并更新动态链接器缓存。

编辑 /etc/ld.so.conf 文件或在 /etc/ld.so.conf.d/ 目录下创建一个新的配置文件:
[root@iZ2zedudtf2cwzi9argky2Z sqlite-autoconf-3490100]# echo “/usr/local/lib” | sudo tee /etc/ld.so.conf.d/sqlite3.conf
/usr/local/lib
[root@iZ2zedudtf2cwzi9argky2Z sqlite-autoconf-3490100]# sudo ldconfig
[root@iZ2zedudtf2cwzi9argky2Z sqlite-autoconf-3490100]# sudo ldconfig
[root@iZ2zedudtf2cwzi9argky2Z sqlite-autoconf-3490100]# ldd $(which sqlite3)
linux-vdso.so.1 => (0x00007ffcd7d3d000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f2944c1b000)
libm.so.6 => /lib64/libm.so.6 (0x00007f2944919000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f2944715000)
libz.so.1 => /lib64/libz.so.1 (0x00007f29444ff000)
libreadline.so.6 => /lib64/libreadline.so.6 (0x00007f29442b9000)
libncurses.so.5 => /lib64/libncurses.so.5 (0x00007f2944092000)
libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f2943e68000)
libc.so.6 => /lib64/libc.so.6 (0x00007f2943a9a000)
/lib64/ld-linux-x86-64.so.2 (0x00007f2944e37000)
[root@iZ2zedudtf2cwzi9argky2Z sqlite-autoconf-3490100]# sqlite3 --version
SQLite header and source version mismatch
2025-02-18 13:38:58 873d4e274b4988d260ba8354a9718324a1c26187a4ab4c1cc0227c03d0f10e70
2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668
从你的操作结果来看,sqlite3 --version 输出了以下错误信息:
SQLite header and source version mismatch
2025-02-18 13:38:58 873d4e274b4988d260ba8354a9718324a1c26187a4ab4c1cc0227c03d0f10e70
2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668
这表明 sqlite3 可执行文件和其动态链接库的版本不匹配。这种情况通常发生在以下几种情况下:

可执行文件和动态库版本不一致:你可能使用了旧版本的 sqlite3 可执行文件,但它试图加载新版本的动态库。
编译或安装过程中出现问题:在编译 SQLite 时,某些文件未正确更新。
以下是解决此问题的具体步骤:

  1. 删除旧版本的 sqlite3
    为了确保系统中只有一个版本的 sqlite3,建议删除旧版本的 sqlite3 可执行文件。

查找所有 sqlite3 文件
运行以下命令查找系统中的所有 sqlite3 文件:
[root@iZ2zedudtf2cwzi9argky2Z sqlite-autoconf-3490100]# sudo mv /usr/bin/sqlite3 /usr/bin/sqlite3.bak
[root@iZ2zedudtf2cwzi9argky2Z sqlite-autoconf-3490100]# sudo mv /usr/bin/sqlite3 /usr/bin/sqlite3.bak
mv: 无法获取"/usr/bin/sqlite3" 的文件状态(stat): 没有那个文件或目录
[root@iZ2zedudtf2cwzi9argky2Z sqlite-autoconf-3490100]# which sqlite3
/usr/local/bin/sqlite3
[root@iZ2zedudtf2cwzi9argky2Z sqlite-autoconf-3490100]# ldconfig -p | grep libsqlite3
libsqlite3.so.3.49.1 (libc6,x86-64) => /usr/local/lib/libsqlite3.so.3.49.1
libsqlite3.so.0 (libc6,x86-64) => /usr/local/lib/libsqlite3.so.0
libsqlite3.so.0 (libc6,x86-64) => /lib64/libsqlite3.so.0
libsqlite3.so (libc6,x86-64) => /usr/local/lib/libsqlite3.so
libsqlite3.so (libc6,x86-64) => /lib64/libsqlite3.so
[root@iZ2zedudtf2cwzi9argky2Z sqlite-autoconf-3490100]# sudo ldconfig
[root@iZ2zedudtf2cwzi9argky2Z sqlite-autoconf-3490100]# sqlite3 --version
-bash: /usr/bin/sqlite3: 没有那个文件或目录
[root@iZ2zedudtf2cwzi9argky2Z sqlite-autoconf-3490100]# sudo mv /usr/bin/sqlite3 /usr/bin/sqlite3.bak
[root@iZ2zedudtf2cwzi9argky2Z sqlite-autoconf-3490100]# sudo mv /usr/bin/sqlite3 /usr/bin/sqlite3.bak
mv: 无法获取"/usr/bin/sqlite3" 的文件状态(stat): 没有那个文件或目录
[root@iZ2zedudtf2cwzi9argky2Z sqlite-autoconf-3490100]# which sqlite3
/usr/local/bin/sqlite3
[root@iZ2zedudtf2cwzi9argky2Z sqlite-autoconf-3490100]# ldconfig -p | grep libsqlite3
libsqlite3.so.3.49.1 (libc6,x86-64) => /usr/local/lib/libsqlite3.so.3.49.1
libsqlite3.so.0 (libc6,x86-64) => /usr/local/lib/libsqlite3.so.0
libsqlite3.so.0 (libc6,x86-64) => /lib64/libsqlite3.so.0
libsqlite3.so (libc6,x86-64) => /usr/local/lib/libsqlite3.so
libsqlite3.so (libc6,x86-64) => /lib64/libsqlite3.so
[root@iZ2zedudtf2cwzi9argky2Z sqlite-autoconf-3490100]# sudo ldconfig
[root@iZ2zedudtf2cwzi9argky2Z sqlite-autoconf-3490100]# sqlite3 --version
-bash: /usr/bin/sqlite3: 没有那个文件或目录
以下是解决问题的具体步骤:

  1. 检查 PATH 环境变量
    运行以下命令,检查 PATH 环境变量是否包含 /usr/local/bin:

Bash
深色版本
echo $PATH
输出应该包含 /usr/local/bin,并且它应该排在 /usr/bin 之前。例如:

深色版本
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
如果 /usr/local/bin 不在 PATH 中,或者它的优先级低于 /usr/bin,可以通过以下方式修复。

修改 PATH 环境变量
编辑 ~/.bashrc 文件:

Bash
深色版本
nano ~/.bashrc
在文件末尾添加以下内容:

Bash
深色版本
export PATH=/usr/local/bin:$PATH
保存并退出后,重新加载配置文件:

Bash
深色版本
source ~/.bashrc
然后再次检查 PATH:

Bash
深色版本
echo $PATH
确保 /usr/local/bin 在 /usr/bin 之前。

  1. 验证 sqlite3 是否正确使用
    运行以下命令,确认系统正在使用正确的 sqlite3 可执行文件:

Bash
深色版本
which sqlite3
输出应该是:

深色版本
/usr/local/bin/sqlite3
然后再次尝试运行 sqlite3 --version:

Bash
深色版本
sqlite3 --version

  1. 强制使用 pysqlite3
    如果上述方法都无法解决问题,可以尝试使用第三方库 pysqlite3 来替代标准库中的 sqlite3 模块。

安装 pysqlite3
Bash
深色版本
pip install pysqlite3-binary
修改 settings.py
在 settings.py 文件顶部添加以下代码,强制 Django 使用 pysqlite3:

Python
深色版本
import pysqlite3
import sys
sys.modules[“sqlite3”] = pysqlite3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2335024.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《前端面试题之 CSS篇(第一集)》

目录 1、CSS的盒模型2、CSS选择器及其优先级3、隐藏元素的方法有那些4、px、em、rem的区别及使用场景5、重排、重绘有什么区别6、水平垂直居中的实现7、CSS中可继承与不可继承属性有哪些8、Sass、Less 是什么?为什么要使用他们?9、CSS预处理器/后处理器是…

MySQL部分总结

mysql学习笔记,如有不足还请指出,谢谢。 外连接,内连接,全连接 外连接:左外、右外 内连接:自己和自己连接 全连接:左外连接右外链接 mysql unique字段 unique可以在数据库层面避免插入相同…

Linux Kernel 2

地址空间(Address Space) 一、物理地址空间(Physical Address Space) 物理地址空间 是指 RAM 和设备内存 在系统内存总线上所呈现的地址布局。 举例:在典型的 32 32 32 位 Intel 架构中, RAM&#xff08…

AndroidTV D贝桌面-v3.2.5-[支持文件传输]

AndroidTV D贝桌面 链接:https://pan.xunlei.com/s/VONXSBtgn8S_BsZxzjH_mHlAA1?pwdzet2# AndroidTV D贝桌面-v3.2.5[支持文件传输] 第一次使用的话,壁纸默认去掉的,不需要按遥控器上键,自己更换壁纸即可

线性方程组的解法

文章目录 线性方程组的解法认识一些基本的矩阵函数MATLAB 实现机电工程学院教学函数构造1.高斯消元法2.列主元消去法3. L U LU LU分解法 线性方程组的解法 看到以下线性方程组的一般形式:设有以下的 n n n阶线性方程组: A x b \mathbf{Ax}\mathbf{b} A…

Python赋能量子计算:算法创新与应用拓展

量子计算与Python结合的算法开发与应用研究 摘要 量子计算作为计算机科学的前沿技术,凭借其独特的计算能力在解决复杂问题方面展现出巨大潜力。Python作为一种高效、灵活的编程语言,为量子计算算法的开发提供了强大的支持。本文从研究学者的视角,系统探讨了量子计算与Pytho…

Java学习笔记(多线程):ReentrantLock 源码分析

本文是自己的学习笔记,主要参考资料如下 JavaSE文档 1、AQS 概述1.1、锁的原理1.2、任务队列1.2.1、结点的状态变化 1.3、加锁和解锁的简单流程 2、ReentrantLock2.1、加锁源码分析2.1.1、tryAcquire()的具体实现2.1.2、acquirQueued()的具体实现2.1.3、tryLock的具…

【软考系统架构设计师】系统配置与性能评价知识点

1、 常见的性能指标 主频外频*倍频 主频1/CPU时钟周期 CPI(Clock Per Instruction)平均每条指令的平均时间周期数 IPC(Instruction Per Clock)每时钟周期运行指令数 MIPS百万条指令每秒 MFLOPS百万个浮点操作每秒 字长影响运算的…

解锁Midjourney创作潜能:超详细提示词(Prompts)分类指南

AI生图自由!就来 ChatTools (https://chat.chattools.cn),畅享Midjourney免费无限绘画。同时体验GPT-4o、Claude 3.7 Sonnet、DeepSeek等强大模型。 为了帮助大家更好地驾驭Midjourney,我们精心整理并分类了大量常用且效果出众的提示词。无论…

大模型分布式推理和量化部署

一、小常识 1、计算大模型占用多少显存 对于一个7B(70亿)参数的模型,每个参数使用16位浮点数(等于 2个 Byte)表示,则模型的权重大小约为: 7010^9 parameters2 Bytes/parameter=14GB 70亿个参数每个参数占用2个字节=14GB 所以我们需要大于14GB的显存。注意14GB单纯是大…

【ROS】分布式通信架构

【ROS】分布式通信架构 前言环境要求主机设置(Master)从机设置(Slave)主机与从机通信测试本文示例启动ROS智能车激光雷达节点本地计算机配置与订阅 前言 在使用 ROS 时,我们常常会遇到某些设备计算能力不足的情况。例…

零基础HTML·笔记(持续更新…)

基础认知 HTML标签的结构 <strong>文字变粗</strong> &#xff1c;开始标签&#xff1e;内容&#xff1c;结束标签&#xff1e; 结构说明&#xff1a; 标签由<、>、1、英文单词或字母组成。并且把标签中<>包括起来的英文单词或字母称为标签名。常…

Visual Studio 2022 UI机器学习训练模块

VS你还是太超标了&#xff0c;现在机器学习都不用写代码了吗&#xff01;&#xff01; 右键项目解决方案&#xff0c;选择机器学习模型

FreeRTOS使任务处于阻塞态的API

在FreeRTOS中&#xff0c;任务进入阻塞状态通常是因为等待某个事件或资源。以下是常用的使任务进入阻塞态的API及其分类&#xff1a; 1. 任务延时 vTaskDelay(pdMS_TO_TICKS(ms)) 将任务阻塞固定时间&#xff08;相对延时&#xff0c;从调用时开始计算&#xff09;。 示例&…

独立开发者之网站的robots.txt文件如何生成和添加

robots.txt是一个存放在网站根目录下的文本文件&#xff0c;用于告诉搜索引擎爬虫哪些页面可以抓取&#xff0c;哪些页面不可以抓取。下面我将详细介绍如何生成和添加robots.txt文件。 什么是robots.txt文件&#xff1f; robots.txt是遵循"机器人排除协议"(Robots…

Leedcode刷题 | Day31_贪心算法05

一、学习任务 56. 合并区间代码随想录738. 单调递增的数字968. 监控二叉树 二、具体题目 1.56合并区间56. 合并区间 - 力扣&#xff08;LeetCode&#xff09; 给出一个区间的集合&#xff0c;请合并所有重叠的区间。 示例 1: 输入: intervals [[1,3],[2,6],[8,10],[15,1…

猫咪如厕检测与分类识别系统系列【一】 功能需求分析及猫咪分类特征提取

开发背景 家里养了三只猫咪&#xff0c;其中一只布偶猫经常出入厕所。但因为平时忙于学业&#xff0c;没法时刻关注牠的行为。我知道猫咪的如厕频率和时长与健康状况密切相关&#xff0c;频繁如厕可能是泌尿问题&#xff0c;停留过久也可能是便秘或不适。为了更科学地了解牠的…

粘性定位(position:sticky)——微信小程序学习笔记

1. 简介 CSS 中的粘性定位&#xff08;Sticky positioning&#xff09;是一种特殊的定位方式&#xff0c;它可以使元素在滚动时保持在视窗的特定位置&#xff0c;类似于相对定位&#xff08;relative&#xff09;&#xff0c;但当页面滚动到元素的位置时&#xff0c;它会表现得…

最新版IDEA超详细图文安装教程(适用Mac系统)附安装包及补丁2025最新教程

目录 前言 一、IDEA最新版下载 二、IDEA安装 三、IDEA补丁 前言 IDEA&#xff08;IntelliJ IDEA&#xff09;是专为Java语言设计的集成开发环境&#xff08;IDE&#xff09;&#xff0c;由JetBrains公司开发&#xff0c;被公认为业界最优秀的Java开发工具之一。DEA全称Int…

JavaWeb-04-Web后端基础(SpringBootWeb、HTTP协议、分层解耦、IOC和DI)

目录 一、SpringBootWeb入门 1.1 概述 1.2 入门程序 1.2.1 需求 1.2.2 开发步骤 1.3 入门解析 二、HTTP协议 2.1 HTTP概述 2.1.1 介绍 2.1.2 特点 2.2 HTTP请求协议 2.2.1 介绍 2.2.2 获取请求数据 2.3 HTTP响应协议 2.3.1 格式介绍 2.3.2 响应状态码 2.3…