Reputation: 123
Symptom: In my Django app, when I call from pysqlite2._sqlite import *
I get the traceback Symbol not found: _sqlite3_enable_load_extension
when
Background:
I have tried
brew uninstall sqlite
and brew uninstall python
and reinstallingAdding these to my .bash_profile
export PATH="$(brew --prefix sqlite)/bin:$PATH"
LDFLAGS="-L/usr/local/opt/sqlite/lib"
CPPFLAGS="-I/usr/local/opt/sqlite/include"
export PKG_CONFIG_PATH=“/usr/local/opt/sqlite/lib/pkgconfig”
python -c "import sqlite3" doesn't return any errors
Gist of traceback: https://gist.github.com/xwchen/e9704fa34f0463d2117fe9fbb37922a1
Upvotes: 14
Views: 11301
Reputation: 394
On my Linux, it was because of a libsqlite3.so.0
located in /usr/local/lib
folder. In this case, it was from Filezilla nightly builds using another sqlite3 version.
To find the links of the share object, use ldd
$ ldd /usr/lib/python3.12/lib-dynload/_sqlite3.cpython-312-x86_64-linux-gnu.so
linux-vdso.so.1 (0x00007ffc92b56000)
libsqlite3.so.0 => /usr/local/lib/libsqlite3.so.0 (0x00007bc7625fb000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007bc762200000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007bc7625dc000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007bc7624f1000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007bc7624ec000)
/lib64/ld-linux-x86-64.so.2 (0x00007bc762771000)
And the problematic file was libsqlite3.so.0 => /usr/local/lib/libsqlite3.so.0
so I just removed it
Note that /usr/local/lib/
often takes over the system libs from /usr/lib/
, that's why it used the wrong libsqlite3.so shared object
Upvotes: 2
Reputation: 2348
In my conda environment simply running conda install sqlite
fixed it.
Upvotes: 5
Reputation: 203
It may happen because it's not able to locate the .so library. As explained here:
On OS X, homebrew installs sqlite3 as “keg-only” because otherwise it interferes with the system sqlite3. This means that libsqlite3.dylib ends up in /usr/local/opt/sqlite/lib, not in /usr/local/lib
So you can simply do this:
export DYLD_LIBRARY_PATH=/usr/local/opt/sqlite/lib:/usr/lib
Then you should be able to import sqlite3.
Upvotes: 9
Reputation: 159
Copied answer from here (https://github.com/Homebrew/homebrew-core/pull/3134). If you're like me, you probably installed sqlite after you install python3. Anyway, if anyone stumbles upon this question and needs an answer...
First remove SQLite, python and python3 if installed via homebrew
brew uninstall --force python
brew uninstall --force python3
brew uninstall --force sqlite
This removes all copies.
Then make sure Xcode 8 or later is installed
Important
Re-install command line tools via
xcode-select --install
sudo xcode-select --reset
and finally install command line tools via pkg file found here.
Look for command line tools in search. (I've downloaded "Command Line Tools (macOS 10.12) for Xcode 8.dmg") Then open DMG and install the pkg found there.
Now install SQLite and then python and python 3 if needed:
brew install sqlite
brew install python
brew install python3
Run brew install python --verbose
and make sure there are no warnings, if none then issues should be resolved.
Don't forget to do
pip install setuptools --upgrade && pip3 install setuptools --upgrade
Upvotes: 14