我已经将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).
当我检查sqlite的版本时,它是3.7.17,所以我从sqlite网站下载了最新版本,并用旧版本替换了它,现在当我对其进行版本化时,它给出了:
$ sqlite3 --version
3.27.2 2019-02-25 16:06:06 bd49a8271d650fa89e446b42e513b595a717b9212c91dd384aab871fc1d0f6d7
当我尝试迁移项目时,仍然会收到与以前完全相同的消息,这意味着未找到较新的版本。我是linux新手,不胜感激。
答案 0 :(得分:6)
这与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
这似乎可行,尽管我不确定这样做是否真的是解决问题的理想解决方案。我想,如果您实际上不是在使用SQLite,那么至少可以通过版本检查,这样您就可以开始工作了。
答案 1 :(得分:3)
我在 Amazon Linux 2 实例上使用上述解决方案时遇到问题,并发现通过我的各种更新尝试安装的内容导致版本冲突。 最初我有这个:
$ python3 --version
Python 3.7.9
$ python3
>>> import sqlite3
>>> sqlite3.sqlite_version
'3.7.17'
>>> exit()
并且 sudo yum install sqlite-3.8.11-1.fc21.x86_64.rpm
安装失败并显示以下消息:
我是通过以下步骤解决的:
sudo yum list | grep sqlite
sudo yum autoremove sqlite-devel
卸载无关的包。
sudo yum install sqlite-3.8.11-1.fc21.x86_64.rpm
更新版本。
sudo yum list | grep sqlite
$ python3
>>> import sqlite3
>>> sqlite3.sqlite_version
'3.8.11'
>>> exit()
答案 2 :(得分:2)
django 2.2需要sqlite版本> = 3.8.3
因此解决方案是更新您的sqlite :
export LD_LIBRARY_PATH="/usr/local/lib"
并将其写入〜/ .bashrc test1:
sqlite3 --version
应该是您的版本
test2:
$python
>>> import sqlite3
>>> sqlite3.sqlite_version
应该是您的版本
答案 3 :(得分:1)
要检查使用哪个版本的SQLite Python:
$ python
Python 3.7.3 (default, Apr 12 2019, 16:23:13)
>>> import sqlite3
>>> sqlite3.sqlite_version
'3.27.2'
对我来说,新版本的sqlite3在/ usr / local / bin中,因此我不得不重新编译Python,告诉它在那看:
sudo LD_RUN_PATH=/usr/local/lib ./configure --enable-optimizations
sudo LD_RUN_PATH=/usr/local/lib make altinstall
我希望有帮助。
答案 4 :(得分:0)
在CentOS 7.6和Python 3.7.3版本中,我遇到了相同的错误。我认为您正在使用Django 2.2.*的某些版本。在Django 2.2的最新版本中,他们更改了SQLIte的版本,这是造成您问题的原因。
这是关于release notes的Django 2.2中的SQLite。
SQLite的最低支持版本从3.7.15增加到3.8.3。
因此,您可以使用此命令安装Django 2.1的最新版本。
pip install Django==2.1.*
我认为问题已经解决。
答案 5 :(得分:0)
我遇到了同样的问题,我为此苦了一段时间。对我来说,最好的解决方案是在settings.py文件中的“数据库”部分中注释掉。
由于我不想使用SQLite数据库,因此不再存在问题。稍后,您可以使用对您有效的数据库更新DATABASE信息。
答案 6 :(得分:0)
我使用以下代码补丁解决了类似的情况。按照我在我的centos7上使用的这些步骤操作,一切都会好起来的。
只需记住让centos7知道您正在调用python3
而不只是python
,否则它将调用默认的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
然后运行:source .bash_profile
确认
python3 --version
Python 3.7.3
从来源安装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
现在,这也是您还应该记住,对于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
通过运行source .bash_profile
使其永久存在
并且您完成了sqlite3 version >= 3.8
。通过以下方式确认:
sqlite3 --version
3.29.0 2019-07-10 17:32:03
然后您可以继续使用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
记住,是
PYTHON3.7 -m pip3 install MODULE
(myvenv37)[me@test my_project]$ python3.7 manage.py runserver
并且服务器应该正在运行。
因此,可以得出结论,在上述情况下,它是migrate
,并且应如下所示:
(venv)[me@test my_project]$ python3.7 manage.py migrate
答案 7 :(得分:0)
另一种选择是使用原子仓库
wget -O - http://updates.atomicorp.com/installers/atomic |sh
yum install atomic-sqlite
LD_LIBRARY_PATH='/opt/atomicorp/atomic/root/usr/lib64/' python3
>>> import sqlite3
>>> sqlite3.sqlite_version
'3.8.5'
答案 8 :(得分:0)
如果继续强制安装 sqlite 3.8.3 或更高版本,您只会因 multilib 和其他不兼容等错误而使情况变得更糟。正如 Theo 评论的那样,最好的方法是在触发名为 check_sqlite_version() 的方法的 sqlite3/base.py(django 中的文件)上注释第 66 行。
这应该只是警告您正在使用小补丁而不是引发异常(ImproperlyConfigured)。
PD:一定要记录下来!
答案 9 :(得分:-2)
我最近遇到了同样的问题 我的解决方案是更改源代码site-packages \ django \ db \ backends \ sqlite3 \ base.py大约68行,到目前为止没有副作用。
def check_sqlite_version(): 如果Database.sqlite_version_info <(3、7、3): 提高ImproperlyConfigured(“需要SQLite 3.8.3或更高版本(已找到%s)。”%Database.sqlite_version)