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

SIM*_*SAL 13 python sqlite django 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).
Run Code Online (Sandbox Code Playgroud)

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

$ sqlite3 --version
3.27.2 2019-02-25 16:06:06 bd49a8271d650fa89e446b42e513b595a717b9212c91dd384aab871fc1d0f6d7
Run Code Online (Sandbox Code Playgroud)

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

Kus*_*era 25

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

这是发行说明Django的2.2左右的SQLite

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

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

pip install Django==2.1.*
Run Code Online (Sandbox Code Playgroud)

我认为问题已经解决。

  • Django 2.2.x 中的 SQLlite 版本要求确实发生了变化,这是正确的,但是如果有人克隆他们已经部署在其他地方的项目,那么简单地安装 Django 2.1.x 而不是 2.2.x 或更高版本对他们没有帮助如果他们的项目需要 2.2 或更高版本,则完全可以。此外,2.1 版本现已结束。 (8认同)
  • 选项 2 对我来说非常有效,可以在旧的 Mac OSX 10.9 机器上从源代码安装 Python 版本 3.9.6。添加此评论,以防万一它可以帮助任何从 Mac 来到这里的人 (2认同)

小智 16

django 2.2需要 sqlite 版本 >= 3.8.3

所以解决方案是更新你的sqlite

  1. sqlite3下载,选择 source_code 版本
  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

测试1:

sqlite3 --version 
Run Code Online (Sandbox Code Playgroud)

应该是你的版本

测试2:

$python
>>> import sqlite3
>>> sqlite3.sqlite_version
Run Code Online (Sandbox Code Playgroud)

应该是你的版本


Ral*_*ton 16

由于这是关于 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
Run Code Online (Sandbox Code Playgroud)

(来自: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,那么这至少会通过版本检查,因此您可以工作。


Mar*_*ley 13

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

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

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

sudo LD_RUN_PATH=/usr/local/lib ./configure --enable-optimizations
sudo LD_RUN_PATH=/usr/local/lib make altinstall
Run Code Online (Sandbox Code Playgroud)


小智 7

我遇到了同样的问题,并为此挣扎了一段时间。对我来说,最好的解决方案是注释掉 settings.py 文件中的 DATABASES 部分。

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


Jcc*_*ria 7

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

这应该只是警告您正在使用小补丁,而不是引发异常(配置不正确)。您也可以用印花代替凸起。

PD:请确保在虚拟环境中对其进行评论并记录下来!

在此输入图像描述


小智 7

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

$ python3 --version
Python 3.7.9
$ python3
>>> import sqlite3
>>> sqlite3.sqlite_version
'3.7.17'
>>> exit()
Run Code Online (Sandbox Code Playgroud)

sudo yum install sqlite-3.8.11-1.fc21.x86_64.rpm安装失败并显示以下消息 :更新消息失败

我通过以下步骤解决了它:

sudo yum list | grep sqlite

这两个软件包由于冲突而阻止更新。 grep 列出 SQLite 冲突

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

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

sudo yum list | grep sqlite

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

$ python3
>>> import sqlite3
>>> sqlite3.sqlite_version
'3.8.11'
>>> exit()
Run Code Online (Sandbox Code Playgroud)


Lae*_*Oss 5

我使用以下代码补丁解决了类似的情况。按照我在我的centos7上使用的这些步骤操作,一切都会好起来的。请记住,不仅要让centos7知道您正在调用python3python否则它将调用默认的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
Run Code Online (Sandbox Code Playgroud)

然后运行: source .bash_profile

确认者

python3 --version
Python 3.7.3 
Run Code Online (Sandbox Code Playgroud)

安装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
Run Code Online (Sandbox Code Playgroud)

现在,这也是您还应该记住为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
Run Code Online (Sandbox Code Playgroud)

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

sqlite3 --version 
3.29.0 2019-07-10 17:32:03
Run Code Online (Sandbox Code Playgroud)

然后,您可以继续使用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
Run Code Online (Sandbox Code Playgroud)

记住,那是

PYTHON3.7 -m pip3 install MODULE

(myvenv37)[me@test my_project]$ python3.7 manage.py runserver 
Run Code Online (Sandbox Code Playgroud)

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

因此,总而言之,在上述情况下为migrate,&应该看起来像这样:

(venv)[me@test my_project]$ python3.7 manage.py migrate
Run Code Online (Sandbox Code Playgroud)


小智 5

经过几个小时的搜索后,我在虚拟环境中使用一个命令解决了这个问题:

pip install pysqlite3-binary
Run Code Online (Sandbox Code Playgroud)

你可以在这里查看 github和这里的文章(有点过时)。

我还发现应该将以下代码行放入 settings.py 中:

__import__('pysqlite3')
import sys
sys.modules['sqlite3'] = sys.modules.pop('pysqlite3')
Run Code Online (Sandbox Code Playgroud)

但对我来说,没有它它也能工作。