157 words
1 minute
Loading SQLite extensions in Python on macOS
Anubhav Gain
2024-03-10

Loading SQLite extensions in Python on macOS#

I finally found a workaround for this error when attempting to load a SQLite extension in Python on macOS:

File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/datasette/app.py", line 614, in _prepare_connection
conn.enable_load_extension(True)
AttributeError: 'sqlite3.Connection' object has no attribute 'enable_load_extension'

The fix is to install Python using Homebrew, and then use that version of Python.

brew install python

This gives you a version of Python that can load SQLite extensions. The problem is there is a good chance that when you type python that’s not the version you will get.

One way to fix that is to run the Homebrew Python directly like this:

/usr/local/opt/python@3/libexec/bin/python

You can create a virtual environment with that Python version like so:

/usr/local/opt/python@3/libexec/bin/python -m venv my-venv
source my-venv/bin/activate

Then within that virtual environment any time you run python (or install extra tools using pip) they will use the correct version of Python and will be able to load extensions.

I expanded this TIL into a section of the Datasette documentation here: https://datasette.io/help/extensions

Loading SQLite extensions in Python on macOS
https://mranv.pages.dev/posts/loading-sqlite-extensions-in-python-on-macos/
Author
Anubhav Gain
Published at
2024-03-10
License
CC BY-NC-SA 4.0