我正在参加「掘金·启航计划」
Centos安装diango3.2框架请参照《django(一)ubuntu18.04安装框架》
在运行:
复制代码
python3 manage.py runserver 0.0.0.0:81
的时候报错:
swift
复制代码
django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).
报错的大体意思是:对sqlite最低版本的需求的3.8.3,但是现在只找到了3.7.17。
百度了一下,关于这个错误大概有两种解决方式:
1 :给django降级(不现实)
卸载django:
复制代码
pip uninstall django
安装低版本:
ini
复制代码
pip install django==2.1.8
但是吧,这种方法显然是不行的。
2 :升级服务器的sqlite3的版本(不好用)
这种方法我尝试之后,不好用,服务器本身的sqlite是更新了,但是python3的sqlite版本并没有更新。重启服务器也没有用。
尝试记录如下:
perl
复制代码
#更新SQLite 3 #获取源代码(在主目录中运行) [root@djangoServer ~]# cd ~ [root@djangoServer ~]# wget https://www.sqlite.org/2019/sqlite-autoconf-3270200.tar.gz [root@djangoServer ~]# tar -zxvf sqlite-autoconf-3270200.tar.gz #构建并安装 [root@djangoServer ~]# cd sqlite-autoconf-3270200 [root@djangoServer sqlite-autoconf-3270200]# ./configure --prefix=/usr/local [root@djangoServer sqlite-autoconf-3270200]# make && make install [root@djangoServer sqlite-autoconf-3270200]# find /usr/ -name sqlite3 /usr/bin/sqlite3 /usr/lib64/python2.7/sqlite3 /usr/local/bin/sqlite3 /usr/local/python3/lib/python3.7/site-packages/django/db/backends/sqlite3 /usr/local/python3/lib/python3.7/sqlite3 [root@djangoServer sqlite-autoconf-3270200]# #不必要的文件,目录删除 [root@djangoServer sqlite-autoconf-3270200]# cd ~ [root@djangoServer ~]# ls anaconda-ks.cfg sqlite-autoconf-3270200 sqlite-autoconf-3270200.tar.gz [root@djangoServer ~]# [root@djangoServer ~]# rm -rf sqlite-autoconf-3270200.tar.gz [root@djangoServer ~]# rm -rf sqlite-autoconf-3270200 #检查版本 ## 最新安装的sqlite3版本 [root@djangoServer ~]# /usr/local/bin/sqlite3 --version 3.27.2 2019-02-25 16:06:06 bd49a8271d650fa89e446b42e513b595a717b9212c91dd384aab871fc1d0f6d7 [root@djangoServer ~]# ## Centos7自带的sqlite3版本 [root@djangoServer ~]# /usr/bin/sqlite3 --version 3.7.17 2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668 [root@djangoServer ~]# ## 可以看到sqlite3的版本还是旧版本,那么需要更新一下。 [root@djangoServer ~]# sqlite3 --version 3.7.17 2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668 [root@djangoServer ~]# ## 更改旧的sqlite3 [root@djangoServer ~]# mv /usr/bin/sqlite3 /usr/bin/sqlite3_old ## 软链接将新的sqlite3设置到/usr/bin目录下 [root@djangoServer ~]# ln -s /usr/local/bin/sqlite3 /usr/bin/sqlite3 ## 查看当前全局sqlite3的版本 [root@djangoServer ~]# sqlite3 --version 3.27.2 2019-02-25 16:06:06 bd49a8271d650fa89e446b42e513b595a717b9212c91dd384aab871fc1d0f6d7 [root@djangoServer ~]# #将路径传递给共享库 # 设置开机自启动执行,可以将下面的export语句写入 ~/.bashrc 文件中,如果如果你想立即生效,可以执行source 〜/.bashrc 将在每次启动终端时执行 [root@djangoServer ~]# export LD_LIBRARY_PATH="/usr/local/lib" #检查Python的SQLite3版本 [root@djangoServer ~]# ipython3 Python 3.7.1 (default, May 3 2019, 09:55:04) Type 'copyright', 'credits' or 'license' for more information IPython 7.5.0 -- An enhanced Interactive Python. Type '?' for help. In [1]: import sqlite3 In [2]: sqlite3.sqlite_version Out[2]: '3.27.2' In [3]: exit [root@djangoServer ~]# #启动开发服务器 [root@djangoServer ~]# cd /work/ [root@djangoServer work]# ls db.sqlite3 manage.py polls test_django [root@djangoServer work]# python3 manage.py runserver
3 :更改python源代码(我使用的方法,这个方法可以用,但是下边的方法我觉得更好)
执行
复制代码
python3 manage.py runserver 0.0.0.0:81
报错之后,我们执行查找sqlite3相关目录的命令:
bash
复制代码
find /usr/ -name sqlite3 ^C[root@iZuf60ynur81p6k0ysvtneZ helloworld]find /usr/ -name sqlite3 /usr/bin/sqlite3 /usr/lib64/python2.7/sqlite3 /usr/lib64/python3.6/sqlite3 /usr/local/aegis/PythonLoader/lib/python2.7/sqlite3 /usr/local/lib/python3.6/site-packages/Django-3.2-py3.6.egg/django/db/backends/sqlite3 /usr/local/download/php-7.4.11/ext/sqlite3 /usr/local/download/django-master/django/db/backends/sqlite3 /usr/local/download/django-master/build/lib/django/db/backends/sqlite3
Django框架的sqlite源文件的目录是:
bash
复制代码
/usr/local/lib/python3.6/site-packages/Django-3.2-py3.6.egg/django/db/backends/sqlite3
更改当前目录下的base.py文件
ruby
复制代码
def check_sqlite_version(): if Database.sqlite_version_info < (3, 6, 3): raise ImproperlyConfigured('SQLite 3.8.3 or later is required (found %s).' % Database.sqlite_version)
将原本的3.8.3版本号改成上方的3.6.3即可。当然,前提是你的项目不使用sqlite,否则大概率可能会出问题。
再次运行:
复制代码
python3 manage.py runserver 0.0.0.0:81
访问浏览器,查看是否成功。
4:使用pysqlite3替代系统的sqlite(我使用的方法)
如果上边的方法不好用,那就不依赖系统提供的sqlite3,使用 pysqlite3 和 pysqlite3-binary 库来操作。首先需要安装这两个库
php
复制代码
pip3 install pysqlite3 pip3 install pysqlite3-binary
查找当前服务器python 安装路径:
复制代码
whereis python
输出:
bash
复制代码
python: /usr/bin/python3.6-config /usr/bin/python2.7 /usr/bin/python3.6m-config /usr/bin/python3.6m-x86_64-config /usr/bin/python3.6m /usr/bin/python3.6 /usr/bin/python /usr/lib/python2.7 /usr/lib/python3.6 /usr/lib64/python2.7 /usr/lib64/python3.6 /etc/python /usr/local/lib/python3.6 /usr/include/python2.7 /usr/include/python3.6m /usr/share/man/man1/python.1.gz
这一堆路径,慢慢找。
修改db代码导入库
bash
复制代码
vi /usr/local/python3/lib/python3.8/site-packages/django/db/backends/sqlite3/base.py # 修改内容 # from sqlite3 import dbapi2 as Database (注释掉这段) from pysqlite3 import dbapi2 as Database # 启用pysqlite3 # :wq 保存即可
再次运行:
复制代码
python3 manage.py runserver 0.0.0.0:81
框架运行成功。
有好的建议,请在下方输入你的评论。