django找不到新的sqlite版本? (需要SQLite 3.8.3或更高版本(发现3.7.17))

时间:2019-04-14 10:20:19

标签: python django sqlite centos7

我已经将django项目克隆到Centos 7 vps,并且现在尝试运行它,但是在尝试migrate时遇到此错误:

$ python manage.py migrate
django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).

当我检查sqlite的版本时,它是3.7.17,所以我从sqlite网站下载了最新版本,并用旧版本替换了它,现在当我对其进行版本化时,它给出了:

$ sqlite3 --version
3.27.2 2019-02-25 16:06:06 bd49a8271d650fa89e446b42e513b595a717b9212c91dd384aab871fc1d0f6d7

当我尝试迁移项目时,仍然会收到与以前完全相同的消息,这意味着未找到较新的版本。我是linux新手,不胜感激。

10 个答案:

答案 0 :(得分:6)

这与Centos7有关,因此您可以使用Fedora软件包来升级Centos sqlite软件包:

wget https://kojipkgs.fedoraproject.org//packages/sqlite/3.8.11/1.fc21/x86_64/sqlite-3.8.11-1.fc21.x86_64.rpm

sudo yum install sqlite-3.8.11-1.fc21.x86_64.rpm

(来自:https://www.reddit.com/r/linuxadmin/comments/c9hy5w/trying_to_upgrade_sqlite_3717_to_version_38_on/ezrtbkm/?utm_source=reddit&utm_medium=web2x&context=3

这似乎可行,尽管我不确定这样做是否真的是解决问题的理想解决方案。我想,如果您实际上不是在使用SQLite,那么至少可以通过版本检查,这样您就可以开始工作了。

答案 1 :(得分:3)

我在 Amazon Linux 2 实例上使用上述解决方案时遇到问题,并发现通过我的各种更新尝试安装的内容导致版本冲突。 最初我有这个:

$ python3 --version
Python 3.7.9
$ python3
>>> import sqlite3
>>> sqlite3.sqlite_version
'3.7.17'
>>> exit()

并且 sudo yum install sqlite-3.8.11-1.fc21.x86_64.rpm 安装失败并显示以下消息: failed updated message

我是通过以下步骤解决的:

sudo yum list | grep sqlite

这两个软件包因冲突而阻止更新。 grep list sqlite conflict

sudo yum autoremove sqlite-devel 卸载无关的包。

sudo yum install sqlite-3.8.11-1.fc21.x86_64.rpm 更新版本。

sudo yum list | grep sqlite

更新的sqlite包的新列表: grep list sqlite v2

$ python3
>>> import sqlite3
>>> sqlite3.sqlite_version
'3.8.11'
>>> exit()

答案 2 :(得分:2)

django 2.2需要sqlite版本> = 3.8.3

因此解决方案是更新您的sqlite

  1. sqlite3下载,选择源代码版本
  2. tar -zxvf sqlite-xxx.tar.gz && cd xx
  3. ./ configure && make && make install
  4. mv / usr / bin / sqlite3 /usr/bin/sqlite3.bak
  5. mv xxx / sqlite3 / usr / bin / sqlite3
  6. export LD_LIBRARY_PATH="/usr/local/lib"并将其写入〜/ .bashrc

test1:

sqlite3 --version 

应该是您的版本

test2:

$python
>>> import sqlite3
>>> sqlite3.sqlite_version

应该是您的版本

答案 3 :(得分:1)

要检查使用哪个版本的SQLite Python:

$ python
Python 3.7.3 (default, Apr 12 2019, 16:23:13) 
>>> import sqlite3
>>> sqlite3.sqlite_version
'3.27.2'

对我来说,新版本的sqlite3在/ usr / local / bin中,因此我不得不重新编译Python,告诉它在那看:

sudo LD_RUN_PATH=/usr/local/lib ./configure --enable-optimizations
sudo LD_RUN_PATH=/usr/local/lib make altinstall

我希望有帮助。

答案 4 :(得分:0)

CentOS 7.6Python 3.7.3版本中,我遇到了相同的错误。我认为您正在使用Django 2.2.*的某些版本。在Django 2.2的最新版本中,他们更改了SQLIte的版本,这是造成您问题的原因。

这是关于release notesDjango 2.2中的SQLite

  

SQLite的最低支持版本从3.7.15增加到3.8.3。

因此,您可以使用此命令安装Django 2.1的最新版本。

pip install Django==2.1.*

我认为问题已经解决。

答案 5 :(得分:0)

我遇到了同样的问题,我为此苦了一段时间。对我来说,最好的解决方案是在settings.py文件中的“数据库”部分中注释掉。

由于我不想使用SQLite数据库,因此不再存在问题。稍后,您可以使用对您有效的数据库更新DATABASE信息。

答案 6 :(得分:0)

我使用以下代码补丁解决了类似的情况。按照我在我的centos7上使用的这些步骤操作,一切都会好起来的。 只需记住让centos7知道您正在调用python3而不只是python,否则它将调用默认的python2,然后在您的virtualenv中出现一系列错误。

从源代码安装python3:

cd ~
wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tar.xz
tar xJf Python-3.7.3.tar.xz
cd Python-3.7.3
./configure
make && make install
export PATH=$HOME/opt/python-3.7.3/bin:$PATH

然后运行:source .bash_profile

确认

python3 --version
Python 3.7.3 

从来源安装sqlite3:

$ cd ~
$ wget https://www.sqlite.org/2019/sqlite-autoconf-3290000.tar.gz
$ tar zxvf sqlite-autoconf-3290000.tar.gz
cd sqlite-autoconf-3290000

$./configure --prefix=$HOME/opt/sqlite
$ make && make install

现在,这也是您还应该记住,对于centos7而言,它知道在哪里查找python3,而不是默认使用python2。在您的.bash_profile上复制并跳过这段代码,或相应地编辑路径:

export PATH=$HOME/opt/sqlite/bin:$PATH
export LD_LIBRARY_PATH=$HOME/opt/sqlite/lib
export LD_RUN_PATH=$HOME/opt/sqlite/lib

通过运行source .bash_profile使其永久存在 并且您完成了sqlite3 version >= 3.8。通过以下方式确认:

sqlite3 --version 
3.29.0 2019-07-10 17:32:03

然后您可以继续使用python3安装django-2.2之类的python3模块。

python3.7 -m pip3 install virtualenv

(myvenv37)[me@test my_project]$ python3.7 -m pip3 install django
Successfully installed django-2.2.3 pytz-2019.1 sqlparse-0.3.0

记住,是

PYTHON3.7 -m pip3 install MODULE

(myvenv37)[me@test my_project]$ python3.7 manage.py runserver 

并且服务器应该正在运行。

因此,可以得出结论,在上述情况下,它是migrate,并且应如下所示:

(venv)[me@test my_project]$ python3.7 manage.py migrate

答案 7 :(得分:0)

另一种选择是使用原子仓库

wget -O - http://updates.atomicorp.com/installers/atomic |sh
yum install  atomic-sqlite
LD_LIBRARY_PATH='/opt/atomicorp/atomic/root/usr/lib64/' python3
>>> import sqlite3
>>> sqlite3.sqlite_version
'3.8.5'

答案 8 :(得分:0)

如果继续强制安装 sqlite 3.8.3 或更高版本,您只会因 multilib 和其他不兼容等错误而使情况变得更糟。正如 Theo 评论的那样,最好的方法是在触发名为 check_sqlite_version() 的方法的 sqlite3/base.py(django 中的文件)上注释第 66 行。

这应该只是警告您正在使用小补丁而不是引发异常(ImproperlyConfigured)。

PD:一定要记录下来!

enter image description here

答案 9 :(得分:-2)

我最近遇到了同样的问题 我的解决方案是更改源代码site-packages \ django \ db \ backends \ sqlite3 \ base.py大约68行,到目前为止没有副作用。

def check_sqlite_version(): 如果Database.sqlite_version_info <(3、7、3): 提高ImproperlyConfigured(“需要SQLite 3.8.3或更高版本(已找到%s)。”%Database.sqlite_version)