Использование SQLite3 с Django 2.2 и Python 3.6.7 на Centos7 - PullRequest
10 голосов
/ 03 апреля 2019

Я перемещаю свой код 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, потому что это максимум, поддерживаемый AWSasticbeanstalk. Python 3.6.7, кажется, поставляется с модулем sqlite версии:

>>> import sqlite3
>>> sqlite3.version
'2.6.0'
>>> sqlite3.sqlite_version
'3.7.17'
>>> 

Я использую отдельную учетную запись для разработки на своей локальной рабочей станции Centos7 и выдаю оболочку 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 не загружает никакой базы данных SQLite3, когда обнаруживает, что она работает в AWS (использует производственную базу данных Mysql в качестве бэкэнда, когда установлен флажок переменной среды PRODUCTION).

Правильно ли я понимаю проблему и приемлемы ли мой подход и реализация?

Я чувствовал, что перекомпиляция python была огромной тратой времени, и, честно говоря, возможно, было бы быстрее вывести локальную версию mysql и перестать тратить время на sqlite ... но так приятно просто скопировать или вывести дамп файл, миграция и loaddata для нового начала.

Если вы считаете, что мой вопрос или замечания заслуживают внимания, пожалуйста, дайте мне толчок!

Кроме того, может ли кто-нибудь с репутацией 1500 или более создать тег "django-2.2", чтобы этот вопрос можно было правильно пометить?

Спасибо!

1 Ответ

2 голосов
/ 14 июня 2019

Я использую Centos7 с python36.

[shmakovpn@localhost ~]$ ldd /usr/lib64/python3.6/lib-dynload/_sqlite3.cpython-36m-x86_64-linux-gnu.so
linux-vdso.so.1 =>  (0x00007ffcafdf6000)
libsqlite3.so.0 => /lib64/libsqlite3.so.0 (0x00007f0adf439000)
libpython3.6m.so.1.0 => /lib64/libpython3.6m.so.1.0 (0x00007f0adef10000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f0adecf4000)
libc.so.6 => /lib64/libc.so.6 (0x00007f0ade927000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f0ade723000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007f0ade520000)
libm.so.6 => /lib64/libm.so.6 (0x00007f0ade21e000)
/lib64/ld-linux-x86-64.so.2 (0x00007f0adf903000)

Это означает, что python36 использует /lib64/libsqlite3.so.0 В консоли Python это выглядит так

>>> import sqlite3
>>> sqlite3.version
'2.6.0'
>>> sqlite3.sqlite_version
'3.7.17'

Требуется заменить библиотеку, поэтому мы должны иметь новуюверсия этого.Есть один из способов сделать это.

wget http://www6.atomicorp.com/channels/atomic/centos/7/x86_64/RPMS/atomic-sqlite-sqlite-3.8.5-3.el7.art.x86_64.rpm
sudo yum localinstall atomic-sqlite-sqlite-3.8.5-3.el7.art.x86_64.rpm
sudo mv /lib64/libsqlite3.so.0.8.6{,-3.17}
sudo cp /opt/atomic/atomic-sqlite/root/usr/lib64/libsqlite3.so.0.8.6 /lib64

Перейдите на консоль python еще раз

>>> import sqlite3
>>> sqlite3.sqlite_version
'3.8.5'

Теперь это выглядит намного лучше.Давайте попробуем создать проект Django и применить миграции

django-admin startproject sqlite3test
cd sqlite3test/
python manage.py migrate
    Operations to perform:
        Apply all migrations: admin, auth, contenttypes, sessions
    Running migrations:
        Applying contenttypes.0001_initial... OK
        ... and so on
ls -al | grep db
    -rw-r--r--.  1 shmakovpn shmakovpn 40960 апр 19 01:02 db.sqlite3

База данных Sqlite3 успешно создана!

...