【问题标题】:How to upgrade sqlite 3.8.2 to >= 3.8.3如何将 sqlite 3.8.2 升级到 >= 3.8.3
【发布时间】:2019-08-25 18:57:21
【问题描述】:

在使用 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 服务器。

如何将我的 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'),
    }
}

【问题讨论】:

  • 这并不容易,因为 Ubuntu 14.04 带有 SQLite 3.8.2 并且没有更新包。见askubuntu.com/questions/580355/…
  • 可以显示你的settings.py数据库配置
  • 自己从源代码编译,看看 Python 是否在 /usr/local/ 中选择了更新版本而不是系统版本?

标签: python django sqlite


【解决方案1】:

我刚刚经历过。我必须安装一个单独的较新版本的 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'

【讨论】:

  • 我也面临这个问题,但是运行 CentOS 7 和 Python 3.6。我设法从linuxfromscratch.org/blfs/view/svn/server/sqlite.html 安装SQLite 3.28 并从命令行运行sqlite3 --version 返回正确的版本,但是Python 仍在使用SQLite 3.7.x。如何重新编译 Python?
  • 只需按照此处的说明从源代码编译 Python:code-learner.com/… 可以确认这适用于 CentOS 7.6.1810 和 Python 3.7.2 和 SQLite 3.28.0
【解决方案2】:

除了上面提到的答案,以防万一你在 Travis CI 上遇到这种行为,添加 dist: xenial 指令来修复它。

【讨论】:

  • 为我节省了 3000 万,..或几个月的损坏构建 :)
【解决方案3】:

我已应用以下修复程序,它适用于我的 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)

【讨论】:

    【解决方案4】:

    如果你不想重新编译 Python 并且你将使用 virtualenv,你可以这样做来设置它而不影响整个系统(我在 Ubuntu 16 上做过):

    1. https://www.sqlite.org/download.html 下载 SQLite 压缩包
    2. 解压内容并 cd 到文件夹中。
    3. 运行以下命令:

      ./配置

      sudo 安装

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

      导出 LD_LIBRARY_PATH="/usr/local/lib"

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

    【讨论】:

    • 节省了我的时间,这在运行时适用于 django-oscar:make sandbox
    • 可以确认,这适用于 CentOS 7 / sqlite 3.31。以root身份配置/制作并在virtualenv中导出。
    • 通过活动脚本,您指的是.bashrc文件?
    • 这样做会引发错误:django.db.utils.NotSupportedError: deterministic=True requires SQLite 3.8.3 or higher
    • @ShanerM13 激活脚本是指用于启动 virtualenv 的脚本 ./bin/activate。
    【解决方案5】:

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

    1. 从官方网站下载最新的 sqlite3。 (https://www.sqlite.org/download.html)wget 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'
    

    【讨论】:

    • 我有警告“配置:警告:无法识别的选项:--enable-optimizations”。 “--enable-optimizations”从哪里来?
    • 那么,尽管pythonimport sqlite3sqlite3.sqlite_version 返回了与要求兼容的版本,为什么python manage.py runserver 仍然抛出相同的错误。
    • 我跟着这个并杀死了我的VS代码并再次重新启动它,它可以工作。
    猜你喜欢
    • 2022-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    • 2016-07-07
    • 2015-05-15
    • 1970-01-01
    相关资源
    最近更新 更多