django (dois) erro de instalação do centos django3.2 SQLite 3.8.3 ou posterior é necessário (encontrado 3.7.17)

Estou participando do "Nuggets·Plano Inicial"

Estrutura diango3.2 de instalação do Centos, consulte " estrutura de instalação django (1) ubuntu18.04 "

enquanto correndo:

python3 manage.py runserver 0.0.0.0:81
复制代码

Ao relatar um erro:

django.core.exceptions.ImproperlyConfiguredSQLite 3.8.3 or later is required (found 3.7.17).
复制代码

O significado geral do erro é: 3.8.3 é necessário para a versão mínima do sqlite, mas agora apenas 3.7.17 foi encontrado.

O Baidu deu uma olhada, provavelmente existem duas soluções para esse erro:

1 : Rebaixar o django (irrealista)

Desinstalar django:   

pip uninstall django
复制代码

Instale a versão inferior:   

pip install django==2.1.8
复制代码

Mas, obviamente, esse método não é aceitável.

2 : Atualize a versão do sqlite3 do servidor (não é fácil de usar)

Depois que tentei esse método, não funcionou, o sqlite do próprio servidor foi atualizado, mas a versão do sqlite do python3 não foi atualizada. Reiniciar o servidor também não ajudou.

Tente logar da seguinte forma:

#更新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 : Altere o código-fonte do python (o método que eu uso, esse método pode ser usado, mas acho que o método abaixo é melhor)

implemento

python3 manage.py runserver 0.0.0.0:81
复制代码

Depois que o erro é relatado, executamos o comando para encontrar o diretório relevante do sqlite3:

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
复制代码

 

O diretório dos arquivos fonte sqlite para o framework Django é:

/usr/local/lib/python3.6/site-packages/Django-3.2-py3.6.egg/django/db/backends/sqlite3
复制代码

11111111111111111111.png

Altere o arquivo base.py no diretório atual

def check_sqlite_version():
    if Database.sqlite_version_info < (363):
        raise ImproperlyConfigured('SQLite 3.8.3 or later is required (found %s).' % Database.sqlite_version)
复制代码

Altere o número da versão 3.8.3 original para 3.6.3 acima. Claro que a premissa é que seu projeto não utiliza sqlite, caso contrário há uma grande probabilidade de ocorrerem problemas.

Corra novamente:

python3 manage.py runserver 0.0.0.0:81
复制代码

Visite seu navegador para ver se funciona.

4 : Use pysqlite3 para substituir o sqlite do sistema (o método que eu uso)

Se o método acima não for fácil de usar, não confie no sqlite3 fornecido pelo sistema e use a biblioteca pysqlite3 e pysqlite3-binary para operar. Primeiro você precisa instalar essas duas bibliotecas

pip3 install pysqlite3
 
pip3 install pysqlite3-binary
复制代码

Encontre o caminho de instalação atual do python do servidor:

whereis python
复制代码

saída:

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
复制代码

Encontre esse monte de caminhos lentamente.

Modifique a biblioteca de importação de código db

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 保存即可
复制代码

Corra novamente:

python3 manage.py runserver 0.0.0.0:81
复制代码

A estrutura é executada com sucesso.

Tem uma boa sugestão, por favor, digite seu comentário abaixo.

Acho que você gosta

Origin juejin.im/post/7229520889258967098
Recomendado
Clasificación