我正在将 Django 代码从 2.1.7 直接移至新的 Django 2.2。我在 Centos7 开发环境中遇到的唯一问题是我的本地开发数据库(sqlite3)版本与我的 Python 3.6.7 不兼容。
我从“manage.py runserver”得到的错误是:
django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later
我无法使用其他版本的 Python,因为这是 AWS elasticbeanstalk 支持的最大版本。 Python 3.6.7 似乎附带了 sqlite 模块的版本:
>>> import sqlite3
>>> sqlite3.version
'2.6.0'
>>> sqlite3.sqlite_version
'3.7.17'
>>>
我在本地 Centos 7 工作站上使用单独的开发帐户并出现问题Pipenv 外壳开始我的代码开发和 IDE。
我发现的唯一解决方法是手动下载 SQLite3 autoconf 版本 3.27.2 并使用以下命令手动编译到该开发帐户主文件夹中:
wget https://www.sqlite.org/2019/sqlite-autoconf-3270200.tar.gz
gzip -d sqlite-autoconf-3270200.tar.gz
tar -xvf sqlite-autoconf-3270200.tar
cd sqlite-autoconf-3270200/
./configure --prefix=/home/devuser/opt/
make
make install
之后,我修改了 .bashrc 以反映以下内容:
export LD_LIBRARY_PATH="${HOME}/opt/lib"
当我重新登录我的 devuser 帐户时,这似乎可以解决问题。我的应用程序似乎使用本地开发数据库正确运行。
Python 3.6.7 (default, Dec 5 2018, 15:02:05)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
>>>import sqlite3
>>> sqlite3.version
'2.6.0'
>>> sqlite3.sqlite_version
'3.27.2'
我的本地开发数据库是 SQLite,但当我的 settings.py 感知到它在 AWS 上的生产中时,它不会加载任何 SQLite3 数据库后端(当选中环境变量标志 PRODUCTION 时,使用 Mysql 生产数据库作为后端)。
我对问题的理解是否正确?我的方法和实施是否可以接受?
我觉得重新编译 python 是一种巨大的时间浪费,说实话,建立本地 mysql 版本并停止在 sqlite 上浪费时间可能会更快......但是复制或转储文件、迁移真是太好了, 和loaddata一个新的开始。