Путь загрузки модуля Django / Sqlite3 в виртуальной среде Python - PullRequest
0 голосов
/ 12 июля 2020

Я разработал веб-сайт в Django (3.0.8), используя последнюю версию Python (3.8.3). Я работаю на сервере Unix с установленным Python 3.6.9, который включает версию Sqlite 3.7.17. Django по-видимому, требует Sqlite 3.8 или выше.

Итак, я скомпилировал локальную копию последней Python, следуя руководству здесь: https://www.a2hosting.com/kb/developer-corner/python/using-a-newer-version-of-python

I настройте виртуальную среду, как описано выше, и все работает без сбоев, за исключением того, что Python все еще использует старую версию Sqlite. После нескольких часов работы, пытаясь понять все это, я в тупике.

Я могу получить доступ к Python и Sqlite3 через командную строку в стандартной среде:

-bash-4.2$ python --version
Python 3.6.9

-bash-4.2$ python
>>> import sqlite3, inspect
>>> sqlite3.sqlite_version
'3.7.17'

>>> inspect.getfile(sqlite3)
'opt/rh/rh-python36/root/usr/lib64/python3.6/sqlite3/__init__.py'

и в виртуальной среде:

-bash-4.2$ source bin/venv/bin/activate
(venv) -bash-4.2$ python --version
Python 3.8.3

-bash-4.2$ python
>>> import sqlite3, inspect
>>> sqlite3.sqlite_version
'3.7.17'

>>> inspect.getfile(sqlite3)
'users/.../lib/python3.8/sqlite3/__init__.py

Итак, несмотря на запуск Python 3.8.3 и указание на правильную библиотеку (насколько я могу судить) в виртуальной среде, версия sqlite по-прежнему такая же, как и в стандартной среде. Будем признательны за любые предложения!

Ответы [ 2 ]

0 голосов
/ 13 июля 2020

Хорошо, ответ, предоставленный Laenka-Oss, решил мою проблему с небольшими изменениями: django не может найти новую версию sqlite? (Требуется SQLite 3.8.3 или более поздняя версия (найдено 3.7.17))

Установить Sqlite из источника:

cd ~
wget https://www.sqlite.org/2020/sqlite-autoconf-3320300.tar.gz
tar zxvf sqlite-autoconf-3290000.tar.gz
cd sqlite-autoconf-3290000

./configure --prefix=$HOME/opt/sqlite --disable-dynamic-extensions --enable-static --disable-shared
make && make install

Обновите пути к библиотекам, добавив эти строки в ваш .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

Установить Python из источника:

cd ~
wget https://www.python.org/ftp/python/3.8.3/Python-3.8.3.tar.xz
tar xJf Python-3.8.3.tar.xz
cd Python-3.8.3
./configure --prefix=$HOME/opt
make && make install

Теперь обновите путь Python, добавив его в конец вашего .bash_profile:

export PATH=$HOME/opt/Python-3.8.3/bin:$PATH

Убедитесь, что все работает:

source .bash_profile
python3 --version
Python 3.8.3

python3
>>> import sqlite3
>>> sqlite3.sqlite_version
'3.32.3'

Если вы столкнулись с ошибкой «SqLite header and version mismatch: ...», убедитесь, что вы запустили source .bash_profile или перезапустите соединение. Если это не сработает, дважды проверьте установку sqlite с использованием приведенных выше команд.

Ваш .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
export PATH=$HOME/opt/Python-3.8.3/bin:$PATH
0 голосов
/ 12 июля 2020

SQlite3 является частью установки python и не является внешней библиотекой, т.е. вы не можете выполнить обновление с помощью диспетчера пакетов, такого как pip. С каждой версией python у вас будет своя версия Sqltie. Однако это неверно, если вы заменили файлы dll. Я видел, как некоторые пользователи делали это на windows, и для меня это довольно рискованный подход.

Если вы заменили dlls, попробуйте вернуть его, и результат этого должен отличаться от python 3.6.9

-bash-4.2$ python
>>> import sqlite3, inspect
>>> sqlite3.sqlite_version
'3.7.17'  # would be different version here

Вы также можете (если хотите) загрузить файл sqlite3.dll (предварительно скомпилированный двоичный) из здесь версии> = Sqlite 3.8. Затем скопируйте этот файл в папку DLLs в каталоге установки python. Вы можете сделать резервную копию вашего старого файла sqlite3.dll на тот случай, если вы решите вернуться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...