如何将sqlite 3.8.2升级到> = 3.8.3

时间:2019-04-04 05:59:14

标签: python django sqlite

在使用Python 3.7.2的虚拟环境中,我试图运行django的python manage.py startap myapp,但出现此错误:

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.8.2).

我正在运行Ubuntu Trusty 14.04 Server。

如何将sqlite版本升级或更新为> = 3.8.3?

我参加了

$ apt list --installed | grep sqlite

libaprutil1-dbd-sqlite3/trusty,now 1.5.3-1 amd64 [installed,automatic]
libdbd-sqlite3/trusty,now 0.9.0-2ubuntu2 amd64 [installed]
libsqlite3-0/trusty-updates,trusty-security,now 3.8.2-1ubuntu2.2 amd64 [installed]
libsqlite3-dev/trusty-updates,trusty-security,now 3.8.2-1ubuntu2.2 amd64 [installed]
python-pysqlite2/trusty,now 2.6.3-3 amd64 [installed]
python-pysqlite2-dbg/trusty,now 2.6.3-3 amd64 [installed]
sqlite3/trusty-updates,trusty-security,now 3.8.2-1ubuntu2.2 amd64 [installed]

sudo apt install --only-upgrade libsqlite3-0

Reading package lists... Done
Building dependency tree      
Reading state information... Done
libsqlite3-0 is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 14 not upgraded.

编辑: settings.py是股票标准:

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

5 个答案:

答案 0 :(得分:6)

出现此错误是因为您的虚拟环境无法连接到新近更新的sqlite3数据库。为此,您必须手动更新sqlite3数据库版本,然后将其路径提供给您的虚拟环境。请按照以下步骤操作:

  1. 从官方网站下载最新的sqlite3。 (https://www.sqlite.org/download.htmlwget http://www.sqlite.org/sqlite-autoconf-3070603.tar.gz

  2. 然后转到该文件夹​​并执行命令。 tar xvfz sqlite-autoconf-3070603.tar.gz

  3. 转到相应的文件夹。 cd sqlite-autoconf-3070603

  4. ./configure

  5. make

  6. make install可能会花费一些时间,但要等到结束。如果花费太多,则终止该过程并继续其余步骤。

  7. 现在,您已成功安装更新的sqlite3。现在触发此命令sudo LD_RUN_PATH=/usr/local/lib ./configure --enable-optimizations

  8. 打开您的虚拟环境激活文件(例如venv / bin / activate),并将此行添加到文件的顶部... export LD_LIBRARY_PATH="/usr/local/lib"

  9. 现在进行检查,您可以在python shell中键入此命令

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

答案 1 :(得分:4)

我刚刚经历了这个。我必须从安装一个单独的较新版本的SQLite,

https://www.sqlite.org/download.html

在/ usr / local / bin中。然后我不得不重新编译Python,告诉它在那里:

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

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

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

答案 2 :(得分:1)

如果您不想重新编译Python而要使用virtualenv,则可以执行此操作以对其进行设置,而不会影响整个系统(我已经在Ubuntu 16上做到了这一点):< / p>

  1. https://www.sqlite.org/download.html下载SQLite压缩包
  2. 提取内容并将cd插入文件夹。
  3. 运行以下命令:

    ./ configure

    sudo make install

  4. 现在,您需要编辑用于启动virtualenv的激活脚本,以便python在正确位置查找新安装的SQLite。只需在文件顶部添加以下行:

    export LD_LIBRARY_PATH =“ / usr / local / lib”

现在,当激活时,Django 2.2+应该可以在virtualenv中正常工作。希望有帮助。

答案 3 :(得分:0)

除了上面提到的答案外,以防万一,如果您在Travis CI上遇到此问题,请添加dist: xenial指令以对其进行修复。

答案 4 :(得分:0)

我已应用以下修复程序,并且该修复程序适用于我的CentOS 7.x服务器。

按照以下示例编辑/usr/lib64/python3.6/site-packages/django/db/backends/sqlite3/base.py文件:

def check_sqlite_version():
# if Database.sqlite_version_info < (3, 8, 3):
# 2018-07-07, edit
if Database.sqlite_version_info < (3, 6, 3):
    raise ImproperlyConfigured('SQLite 3.8.3 or later is required (found %s).' % Database.sqlite_version)