在使用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'),
}
}
答案 0 :(得分:6)
出现此错误是因为您的虚拟环境无法连接到新近更新的sqlite3数据库。为此,您必须手动更新sqlite3数据库版本,然后将其路径提供给您的虚拟环境。请按照以下步骤操作:
从官方网站下载最新的sqlite3。 (https://www.sqlite.org/download.html)wget http://www.sqlite.org/sqlite-autoconf-3070603.tar.gz
然后转到该文件夹并执行命令。
tar xvfz sqlite-autoconf-3070603.tar.gz
转到相应的文件夹。 cd sqlite-autoconf-3070603
./configure
make
make install
可能会花费一些时间,但要等到结束。如果花费太多,则终止该过程并继续其余步骤。
现在,您已成功安装更新的sqlite3。现在触发此命令sudo LD_RUN_PATH=/usr/local/lib ./configure --enable-optimizations
打开您的虚拟环境激活文件(例如venv / bin / activate),并将此行添加到文件的顶部...
export LD_LIBRARY_PATH="/usr/local/lib"
现在进行检查,您可以在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>
运行以下命令:
./ configure
sudo make install
现在,您需要编辑用于启动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)