It’s well-known that the Python that comes with OS X machines typically doesn’t have _bsddb
.
I downloaded Python 2.6.8 and attempted to build it and it wouldn’t build the _bsddb
module.
Here’s what I did to fix this.
I used Homebrew to install berkeley-db4
. For me, this grabbed version 4.8.30.
brew install berkeley-db4
Edited Modules/_bsddb.c
and replaced all instances of DB_XIDDATASIZE
with DB_GID_SIZE
. I removed lines that had DB_XA_CREATE
.
Compiled and linked with:
gcc -fno-strict-aliasing -fno-common -dynamic -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/usr/local/Cellar/berkeley-db4/4.8.30/include/ -I/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6 -c /Users/marca/src/Python-2.6.8/Modules/_bsddb.c -o _bsddb.o
gcc -bundle -undefined dynamic_lookup _bsddb.o -L/Library/Frameworks/Python.framework/Versions/2.6/lib -L/usr/local/lib -ldb -o _bsddb.so -Wl,-search_paths_first
This created the file Modules/_bsddb.so
.
At this point, I can import if I run python in the Modules
directory where I built _bsddb.so
:
$ python2.6
Python 2.6.7 (r267:88850, Oct 11 2012, 20:15:00)
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import bsddb
>>> dir(bsddb)
['MutableMapping', '_DBWithCursor', '_DeadlockWrap', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', '__version__', '_bsddb', '_checkflag', '_db', '_iter_mixin', '_openDBEnv', 'absolute_import', 'btopen', 'collections', 'db', 'dbutils', 'error', 'hashopen', 'os', 'ref', 'rnopen', 'sys']
Now you can copy _bsddb.so
into your lib-dynload
directory — e.g.:
sudo cp _bsddb.so /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload
(above is for the system Python 2.6 that comes with OS X)
or
sudo cp _bsddb.so sudo cp /Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload
(above is for a Python 2.6 installed from a .dmg from Python.org or built from source as a framework build)
References: