centos部署Django,出现的sqlite版本问题解决方法

Centos7.9系统,python版本2.7.5和3.6.8,sqlite版本是3.7.17和3.39.1(sqlite3版本,升级后的版本,系统共存两版本),采用python3.6.8创建python虚拟环境,安装Django版本2.2.9,安装之后运行项目下的manage.py,出现如下错误:

(py3_storm) [root@localhost myproject01]# python manage.py runserver
Watching for file changes with StatReloader
Exception in thread django-main-thread:
Traceback (most recent call last):
  File "/usr/lib64/python3.6/threading.py", line 916, in _bootstrap_inner
    self.run()
  File "/usr/lib64/python3.6/threading.py", line 864, in run
    self._target(*self._args, **self._kwargs)
  File "/root/.virtualenvs/py3_storm/lib/python3.6/site-packages/django/utils/autoreload.py", line 54, in wrapper
    fn(*args, **kwargs)
  File "/root/.virtualenvs/py3_storm/lib/python3.6/site-packages/django/core/management/commands/runserver.py", line 109, in inner_run
    autoreload.raise_last_exception()
  File "/root/.virtualenvs/py3_storm/lib/python3.6/site-packages/django/utils/autoreload.py", line 77, in raise_last_exception
    raise _exception[1]
  File "/root/.virtualenvs/py3_storm/lib/python3.6/site-packages/django/core/management/__init__.py", line 337, in execute
    autoreload.check_errors(django.setup)()
  File "/root/.virtualenvs/py3_storm/lib/python3.6/site-packages/django/utils/autoreload.py", line 54, in wrapper
    fn(*args, **kwargs)
  File "/root/.virtualenvs/py3_storm/lib/python3.6/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/root/.virtualenvs/py3_storm/lib/python3.6/site-packages/django/apps/registry.py", line 114, in populate
    app_config.import_models()
  File "/root/.virtualenvs/py3_storm/lib/python3.6/site-packages/django/apps/config.py", line 211, in import_models
    self.models_module = import_module(models_module_name)
  File "/usr/lib64/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 "/root/.virtualenvs/py3_storm/lib/python3.6/site-packages/django/contrib/auth/models.py", line 2, in <module>
    from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
  File "/root/.virtualenvs/py3_storm/lib/python3.6/site-packages/django/contrib/auth/base_user.py", line 47, in <module>
    class AbstractBaseUser(models.Model):
  File "/root/.virtualenvs/py3_storm/lib/python3.6/site-packages/django/db/models/base.py", line 117, in __new__
    new_class.add_to_class('_meta', Options(meta, app_label))
  File "/root/.virtualenvs/py3_storm/lib/python3.6/site-packages/django/db/models/base.py", line 321, in add_to_class
    value.contribute_to_class(cls, name)
  File "/root/.virtualenvs/py3_storm/lib/python3.6/site-packages/django/db/models/options.py", line 204, in contribute_to_class
    self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
  File "/root/.virtualenvs/py3_storm/lib/python3.6/site-packages/django/db/__init__.py", line 28, in __getattr__
    return getattr(connections[DEFAULT_DB_ALIAS], item)
  File "/root/.virtualenvs/py3_storm/lib/python3.6/site-packages/django/db/utils.py", line 201, in __getitem__
    backend = load_backend(db['ENGINE'])
  File "/root/.virtualenvs/py3_storm/lib/python3.6/site-packages/django/db/utils.py", line 110, in load_backend
    return import_module('%s.base' % backend_name)
  File "/usr/lib64/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "/root/.virtualenvs/py3_storm/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py", line 66, in <module>
    check_sqlite_version()
  File "/root/.virtualenvs/py3_storm/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py", line 63, 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).

解决方法:

方法一:重装sqlite3,重装python,重新创建python虚拟环境后重装Django,无法解决此问题

方法二:通过降低Django版本去解决,结果实践证明不行。

方法三:升级sqlite到最新的3.39.1,无法解决此问题。

方法四:修改Django项目settings.py中的DATABASES配置项更新为手动指定SQLite版本的格式,修改参数如下:

无法解决此问题

'ENGINE': 'django.db.backends.sqlite3',

'NAME': BASE_DIR / 'db.sqlite3',

'OPTIONS': { 'version': '3.39.1', }

方法五:使用 pysqlite3 和 pysqlite3-binary 库来操作,可以解决此问题

pip3 install pysqlite3
pip3 install pysqlite3-binary

此处遇到个小插曲,pysqlite3安装不上:

py3_storm) [root@localhost sqlite3]# pip3 install pysqlite3 Collecting pysqlite3 Using cached pysqlite3-0.5.1.tar.gz (40 kB) Preparing metadata (setup.py) ... done Building wheels for collected packages: pysqlite3 Building wheel for pysqlite3 (setup.py) ... error ERROR: Command errored out with exit status 1:

解决方法如下:

  1. 确保你已经安装了 sqlite3-devel 包,这是为了在CentOS上构建 pysqlite3 扩展所需的SQLite开发库。你可以使用以下命令安装:

    sudo yum install sqlite-devel
    
  2. 安装 gcc 和 python3-devel,这是为了编译 pysqlite3 时所需的构建工具和Python开发库。你可以使用以下命令安装:

    sudo yum install gcc python3-devel
    
  3. 确保你的Python环境已激活,然后尝试重新安装 pysqlite3

    pip install pysqlite3
    

4. 设置以下环境变量,然后重新安装 pysqlite3

export LDFLAGS="-L/usr/local/lib"
export LD_LIBRARY_PATH="/usr/local/lib"
export CPPFLAGS="-I/usr/local/include"

pip install pysqlite3

5. 然后恢复setting.py中databases配置项到默认。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
 

6. 然后更改下,....../sqlite3/base.py,每个人安装路径不一样,我的python虚拟环境路径如下: 

vim /root/.virtualenvs/py3_storm/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py

#修改内容
#from sqlite3 import dbapi2 as Database (注释掉这段)
from pysqlite3 import dbapi2 as Database #改成pysqlite3

至此问题解决:

(py3_storm) [root@localhost myproject01]# python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
July 25, 2023 - 08:21:23
Django version 2.2.9, using settings 'myproject01.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
 

(py3_storm) [root@localhost myproject01]# python manage.py runserver 0:8080
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
July 25, 2023 - 08:21:40
Django version 2.2.9, using settings 'myproject01.settings'
Starting development server at http://0:8080/
Quit the server with CONTROL-C.
 

参考文献地址:https://www.cnblogs.com/shaoyishi/p/16702889.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值