Django2.2以上针对Sqlite3版本不匹配
前言 很久没有水博客了,在运行一个Django
项目的时, 服务器版本大概Centos7.2
,新机器花了点时候安装完需要的环境和依赖,本想一发入魂直接成功的,昨天在Ubuntu上成功运行, 结果Centos就给我整个报错。
1 2 3 ..... raise ImproperlyConfigured('SQLite 3.8.3 or later is required (found %s).' % Database.sqlite_version) django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).
就是Django
查到的Sqlite
的版本不对,找到的是3.7.17, 但是对版本要求(version <= 3.8.3),爬了一下资料, 在Django版本说明 中看到
1 2 # SQLite的最低支持版本从3.7.15增加到3.8.3 The minimum supported version of SQLite is increased from 3.7.15 to 3.8.3.
这就得升级Sqlite3的版本了
下载 Sqlite 下载官网 Sqlite 3.28.0
选择需要的版本下载Source Code -> sqlite-autoconf*
安装 以写博客时的最新版安装为例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 $ wget http://www.sqlite.org/2019/sqlite-autoconf-3280000.tar.gz $ tar -zxvf sqlite-autoconf-3280000.tar.gz $ cd sqlite-autoconf-3280000 $ ./configure $ make && sudo make install
等待编译完成即可,如果没有什么其他的报错,应该就OK的。
测试 如果是Centos7,yum更新了最新的Sqlite,默认的版本应该是3.7.17,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 $ sudo mv -v /usr/bin/sqlite3 /usr/bin/sqlite3.7.17 "/usr/bin/sqlite3" -> "/usr/bin/sqlite3.7.17" $ sudo cp -v sqlite3 /usr/bin "sqlite3" -> "/usr/bin/sqlite3" $ ls /usr/bin |grep sqlite sqlite3 sqlite3.7.17 $ export LD_LIBRARY_PATH="/usr/local/lib"
使用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 $ sqlite3 --version 3.28.0 2019-04-16 19:49:53 884b4b7e502b4e991677b53971277adfaf0a04a284f8e483e2553d0f83156b50 $ python3.6 Python 3.6.8 (default, Apr 16 2019, 14:31:25) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux Type "help" , "copyright" , "credits" or "license" for more information. >>> import sqlite3 >>> sqlite3.sqlite_version '3.28.0' >>> exit () $ python3.6 manage.py Type 'manage.py help <subcommand>' for help on a specific subcommand. Available subcommands: [auth] changepassword createsuperuser [contenttypes] remove_stale_contenttypes ...
正常了,没有版本不匹配的报错了。 其实主要sqlite3是yum源的最新版本才3.7.17,别卸载它后再装(跳过坑),yum依赖sqlite,所以只有编译安装或者其他方式安装后替换文件目录。
另外要注意的是,sudo python3.6 & python3.6
的执行结果是不同的。
sudo不一定能读到新版本的Sqlite,窝再去爬爬文章待补充。
文章比较乱,机器差异什么的或许有不同,仅供参考。
参考文章: Django2.2で開発サーバー起動時にSQLite3のエラーが出た場合の対応
END.