Can't change system default SQLite binary
Question:
Using Django and SQLite I want to run most recent SQLite version; most recent SQLite binary, not the SQLite Python library. I have an SQLite binary that is not the system default and can’t change the default version.
I’m not using Django’s ORM but replaced it with a standalone SQLAlchemy version. Related (but has to do with running the most recent Python SQLite library).
Answers:
Python can’t use the sqlite3
binary directly. It always uses a module which is linked against the sqlite3
shared library. That means you have to follow the instructions in “How to upgrade sqlite3 in python 2.7.3 inside a virtualenv?” to create a version of the pysqlite
module in your virtualenv.
You can then use this import
from pysqlite2 import dbapi2 as sqlite
to shadow the system’s default sqlite
module with the new one.
Another option would be to get Python’s source code, compile everything and copy the file sqlite.so
into your virtualenv. The drawback of this approach is that it’s brittle and hard to repeat by other people.
Try this easy route first if you’re on windows: grab the dll from the sqlite download page (it will be under the “Precompiled Binaries for Windows” heading) and add it to Anaconda’s dll path (like C:UsersYourUserNameAnaconda3DLLs
). The new versions there come with goodies like FTS5 already enabled.
If you’re on Linux, then refer to Install Python and Sqlite from Source and Compiling SQLite for use with Python Applications
The simplest option if you just need a recent version of SQLite from python is now to install the pysqlite3 package:
pip install pysqlite3-binary
This comes with a recent version of SQLite statically-linked. You can use it in a venv without affecting any other package.
You can use it like this:
from pysqlite3 import dbapi2 as sqlite3
print(sqlite3.sqlite_version)
If you happen to be using peewee
, it will pick it up automatically.
If you need a specific version of SQLite, you can build this package, as suggested in Aaron Digulla’s answer.
Using Django and SQLite I want to run most recent SQLite version; most recent SQLite binary, not the SQLite Python library. I have an SQLite binary that is not the system default and can’t change the default version.
I’m not using Django’s ORM but replaced it with a standalone SQLAlchemy version. Related (but has to do with running the most recent Python SQLite library).
Python can’t use the sqlite3
binary directly. It always uses a module which is linked against the sqlite3
shared library. That means you have to follow the instructions in “How to upgrade sqlite3 in python 2.7.3 inside a virtualenv?” to create a version of the pysqlite
module in your virtualenv.
You can then use this import
from pysqlite2 import dbapi2 as sqlite
to shadow the system’s default sqlite
module with the new one.
Another option would be to get Python’s source code, compile everything and copy the file sqlite.so
into your virtualenv. The drawback of this approach is that it’s brittle and hard to repeat by other people.
Try this easy route first if you’re on windows: grab the dll from the sqlite download page (it will be under the “Precompiled Binaries for Windows” heading) and add it to Anaconda’s dll path (like C:UsersYourUserNameAnaconda3DLLs
). The new versions there come with goodies like FTS5 already enabled.
If you’re on Linux, then refer to Install Python and Sqlite from Source and Compiling SQLite for use with Python Applications
The simplest option if you just need a recent version of SQLite from python is now to install the pysqlite3 package:
pip install pysqlite3-binary
This comes with a recent version of SQLite statically-linked. You can use it in a venv without affecting any other package.
You can use it like this:
from pysqlite3 import dbapi2 as sqlite3
print(sqlite3.sqlite_version)
If you happen to be using peewee
, it will pick it up automatically.
If you need a specific version of SQLite, you can build this package, as suggested in Aaron Digulla’s answer.