報錯(SQLite 3.8.3 or later is required (found 3.7.17).)的解決辦法

在服務器上剛部署完Django項目,python manage.py runserver 0.0.0.0:8000啓動啓動的時候報錯:django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).,以下爲報錯展示及解決辦法。

一、報錯演示

(venv) [root@localhost celery]# python manage.py  runserver 0.0.0.0:8000
Watching for file changes with StatReloader
Exception in thread django-main-thread:
Traceback (most recent call last):
  File "/usr/local/python3/lib/python3.6/threading.py", line 916, in _bootstrap_inner
    self.run()
  File "/usr/local/python3/lib/python3.6/threading.py", line 864, in run
    self._target(*self._args, **self._kwargs)
  File "/home/celery/venv/lib/python3.6/site-packages/django/utils/autoreload.py", line 53, in wrapper
    fn(*args, **kwargs)
  File "/home/celery/venv/lib/python3.6/site-packages/django/core/management/commands/runserver.py", line 109, in inner_run
    autoreload.raise_last_exception()
  File "/home/celery/venv/lib/python3.6/site-packages/django/utils/autoreload.py", line 76, in raise_last_exception
    raise _exception[1]
  File "/home/celery/venv/lib/python3.6/site-packages/django/core/management/__init__.py", line 357, in execute
    autoreload.check_errors(django.setup)()
  File "/home/celery/venv/lib/python3.6/site-packages/django/utils/autoreload.py", line 53, in wrapper
    fn(*args, **kwargs)
  File "/home/celery/venv/lib/python3.6/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/home/celery/venv/lib/python3.6/site-packages/django/apps/registry.py", line 114, in populate
    app_config.import_models()
  File "/home/celery/venv/lib/python3.6/site-packages/django/apps/config.py", line 211, in import_models
    self.models_module = import_module(models_module_name)
  File "/home/celery/venv/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/home/celery/venv/lib/python3.6/site-packages/django/contrib/auth/models.py", line 2, in <module>
    from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
  File "/home/celery/venv/lib/python3.6/site-packages/django/contrib/auth/base_user.py", line 47, in <module>
    class AbstractBaseUser(models.Model):
  File "/home/celery/venv/lib/python3.6/site-packages/django/db/models/base.py", line 121, in __new__
    new_class.add_to_class('_meta', Options(meta, app_label))
  File "/home/celery/venv/lib/python3.6/site-packages/django/db/models/base.py", line 325, in add_to_class
    value.contribute_to_class(cls, name)
  File "/home/celery/venv/lib/python3.6/site-packages/django/db/models/options.py", line 208, in contribute_to_class
    self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
  File "/home/celery/venv/lib/python3.6/site-packages/django/db/__init__.py", line 28, in __getattr__
    return getattr(connections[DEFAULT_DB_ALIAS], item)
  File "/home/celery/venv/lib/python3.6/site-packages/django/db/utils.py", line 207, in __getitem__
    backend = load_backend(db['ENGINE'])
  File "/home/celery/venv/lib/python3.6/site-packages/django/db/utils.py", line 111, in load_backend
    return import_module('%s.base' % backend_name)
  File "/home/celery/venv/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "/home/celery/venv/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py", line 68, in <module>
    check_sqlite_version()
  File "/home/celery/venv/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py", line 65, in check_sqlite_version
    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).

二、問題解決

  1. 按照習慣,翻譯一下報錯信息
    在這裏插入圖片描述
    大致意思是:Django需要SQLite 3.8.3或更高版本,而現在的版本爲3.7.17

  2. 兩個解決辦法
    方法一:給Django降級

    如果是生產環境或者項目規定了Django版本,那麼降級Django會引起一系列的問題,本人建議使用方法二,慎重慎重,當然測試環境就無所謂了。

    卸載Django

    pip uninstall django
    

    安裝低版本,版本號根據自身項目選擇合適的

    pip install django==2.1.7
    

    方法二:升級SQLite
    (1)獲取安裝包下載鏈接
    下載地址:https://www.sqlite.org/download.html
    在這裏插入圖片描述

    最好重新獲取一下下載鏈接,否則可能不是最新版(以上截圖爲本人寫此篇文章時候的最新版)

    (2)wget下載

    #鏈接最好重新獲取,否則可能不是最新版本
    wget https://www.sqlite.org/2019/sqlite-autoconf-3300100.tar.gz
    

    (3)解壓並安裝

    [root@localhost home]# tar zxvf sqlite-autoconf-3300100.tar.gz
    [root@localhost home]# cd sqlite-autoconf-3300100/
    [root@localhost sqlite-autoconf-3300100]# ./configure
    [root@localhost sqlite-autoconf-3300100]# make & make install
    

    (4)查看版本

    #檢查新安裝的sqlite3版本
    [root@localhost home]# /usr/local/bin/sqlite3 --version
    3.30.1 2019-10-10 20:19:45 18db032d058f1436ce3dea84081f4ee5a0f2259ad97301d43c426bc7f3df1b0b
    
    #檢查舊的sqlite3版本
    [root@localhost home]# /usr/bin/sqlite3 --version
    3.7.17 2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668
    
    # 把舊的sqlite3改個名字
    [root@localhost home]# mv /usr/bin/sqlite3  /usr/bin/sqlite3_old
    
    # 設置軟鏈接
    [root@localhost home]# ln -s /usr/local/bin/sqlite3 /usr/bin/sqlite3
    
    #查看sqlite3版本
    [root@localhost home]# sqlite3 --version
    3.30.1 2019-10-10 20:19:45 18db032d058f1436ce3dea84081f4ee5a0f2259ad97301d43c426bc7f3df1b0b
    

    (5)設置開機自啓動

    # 設置開機自啓動
    [root@localhost home]# export LD_LIBRARY_PATH="/usr/local/lib"
    

    (6)檢查Python的SQLite3版本

    [root@localhost home]# python3
    Python 3.6.5 (default, Jul  9 2019, 20:03:55) 
    [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.30.1'
    >>> exit()  
    [root@localhost home]# 
    

    (7)完成

如果你使用虛擬環境啓動的項目,可能還會繼續報錯,需要把虛擬環境刪除,重新創建即可
友情提示:可以先生成依賴文件,然後一會批量導入。
可能用到的命令

  1. 依賴文件生成:pip freeze > requirements.txt
  2. 依賴文件安裝:pip install -r requirements.txt
  3. 創建虛擬環境(不指定Python版本,Centos7默認會使用2.7):virtualenv name
  4. 創建虛擬環境(指定Python版本):virtualenv -p /usr/bin/python3 name

歡迎留言吐槽

發佈了63 篇原創文章 · 獲贊 124 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章