django can't find new sqlite version? (SQLite 3.8.3 or later is required (found 3.7.17))

后端 未结 9 1474
既然无缘
既然无缘 2020-12-08 10:18

I\'ve cloned a django project to a Centos 7 vps and I\'m trying to run it now, but I get this error when trying to migrate:

$ python manage.py m         


        
相关标签:
9条回答
  • 2020-12-08 11:01

    i had recently same problem My solution was to change source code site-packages\django\db\backends\sqlite3\base.py line around 68 So far no side effects.

    def check_sqlite_version(): if Database.sqlite_version_info < (3, 7, 3): raise ImproperlyConfigured('SQLite 3.8.3 or later is required (found %s).' % Database.sqlite_version)

    0 讨论(0)
  • 2020-12-08 11:03

    I got the same error in CentOS 7.6 and Python 3.7.3 versions. I think you are using Django 2.2.* some version. In latest of Django 2.2, they changed the SQLIte version, that cause of your problem.

    This is the release notes of Django 2.2 about SQLite.

    The minimum supported version of SQLite is increased from 3.7.15 to 3.8.3.

    So I found 3 steps to solve this problem,


    • Downgrade Django Version

    So you can install latest version of Django 2.1 by using this command, which mean you're going to downgrade your Django version.

    pip install Django==2.1.*
    

    • Upgrading SQLite on CentOS to 3.8.3 or Later

    or you can followup below steps as well to keep the latest version Django. I directly get the steps from Upgrading SQLite on CentOS to 3.8.3 or Later article.

    You can download the latest sqlite version from here.

    wget https://www.sqlite.org/2019/sqlite-autoconf-3280000.tar.gz
    tar zxvf sqlite-autoconf-3280000.tar.gz
    ./configure
    make
    sudo make install
    

    We've installed to the latest version, but the problem is same. Here,

    >>> import sqlite3
    >>> sqlite3.sqlite_version
    '3.7.17'
    

    In the article, they've mentioned about LD_RUN_PATH and LD_LIBRARY_PATH paths.

    Then make sure to compile python again using the LD_RUN_PATH environment variable. It is better to use this variable over LD_LIBRARY_PATH. Using LD_LIBRARY_PATH - whenever python is run it will look for linked libraries with that path. What we want is for the libraries to be cooked into python at link time - compile time.

    So based on the article, we can do the similar thing,

    cd /opt/Python-x.y.z
    LD_RUN_PATH=/usr/local/lib  ./configure
    LD_RUN_PATH=/usr/local/lib make
    LD_RUN_PATH=/usr/local/lib make altinstall
    

    Then try again,

    >>> import sqlite3
    >>> sqlite3.sqlite_version
    '3.31.1'
    

    Here we go, one thing they've mentioned,

    If you do not use LD_RUN_PATH, then you have to make sure that the LD_RUN_PATH environment variable is set to /usr/local/lib for every user that is going to run python - which can be really annoying to do.


    • testing a Django 2.2 website with SQLite3 on CentOS 7

    This is same as the previous one and based on LD_LIBRARY_PATH approach. Here is the steps from the article,

    $ wget https://www.sqlite.org/2018/sqlite-autoconf-3240000.tar.gz
    $ tar zxvf sqlite-autoconf-3240000.tar.gz
    $ ./configure --prefix=/usr/local
    $ make
    $ sudo make install
    $
    $ python3.6 -c "import sqlite3; print(sqlite3.sqlite_version)"
    3.7.17
    $
    $ export LD_LIBRARY_PATH=/usr/local/lib
    $ python3.6 -c "import sqlite3; print(sqlite3.sqlite_version)"
    3.24.0
    

    If the last two steps didn't work, please comment below with the error you got and I'll find another solution for you.

    0 讨论(0)
  • 2020-12-08 11:04

    I had the same issue and I struggled with it for a while. For me the best solution was to comment out DATABASES section in settings.py file.

    As I don't want to use SQLite database then issue does not exist anymore. Later on you can update DATABASE information with the db that is valid for you.

    0 讨论(0)
提交回复
热议问题