4

Do the following on the default Python install on Mac OS X 10.5 (Leopard) w/ Developer Tools:

noel ~ : python

Python 2.5.1 (r251:54863, Jan 13 2009, 10:26:13) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import bsddb
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/bsddb/__init__.py", line 51, in <module>
import _bsddb
ImportError: No module named _bsddb

nice, huh? How do I fix this without giving up and installing/configuring/maintaining my own Python package as per TMNC's suggestion or using MacPorts etc?

Edit

I've gone around the problem by installing Python2.4 and BSDDB via MacPorts.

My question still stands: why is the default install broken and is it possible to fix it.

Community
  • 1
  • 1
Noel
  • 2,061
  • 4
  • 31
  • 47
  • Since the vendor version is broken that's an extreme good explanation for why you'd want to keep a separate version which YOU maintain instead of the vendor. Go use MacPorts. – Jeremy L May 02 '09 at 05:38

5 Answers5

6

Follow the instructions at http://marc-abramowitz.com/archives/2007/11/28/hacking-os-xs-python-dbhash-and-bsddb-modules-to-work/ .

Alex Martelli
  • 854,459
  • 170
  • 1,222
  • 1,395
  • 1
    Yeah, I ran across that too. It's not the answer I'm looking for, in that you have to install/maintain another version of bsddb yourself. I am looking for a way to fix the default install of bsddb. – Noel May 02 '09 at 04:39
  • This is a good suggestion... it isn't that you're installing/maintaining another version bsddb, you're installing the first one that works :-) There is no _bsddb anywhere on the system, so you're going to have to do something to produce the missing functionality that's required. – Jarret Hardie May 02 '09 at 12:06
  • You're right that there isn't a _bsddb module, but there is a bsddb module. I'm asking for a technical explanation of why _bsddb is there, and if it is possible to change the behavior to use that bsddb. – Noel May 02 '09 at 15:11
  • 1
    the bsddb module tries to load the _bsddb extension -- but the latter can only be built if libbsddb is present, and it isn't by default on MacOSX. So, Abramowitz shows one way you can remedy that. There is no way you can use the bsddb module if the latter can't load the underlying _bsddb one, so that's what you must remedy. – Alex Martelli May 02 '09 at 16:16
  • Thanks! The one point I was confused on Abramowitz's explanation was the modifications to the dbhash.py file--AFAIK, I'm not interested in importing *both*. Will it suffice to just get the bsddb3 installed, no hackery of dbhash required if I just want to import bsddb? – Noel May 02 '09 at 16:36
  • 1
    If you install bsddb3, you'll have to import bsddb3 as bsddb unless you want to do further hacking (renames &c). Abramowitz's patch to dbhash.py just performs this change in that module. – Alex Martelli May 03 '09 at 05:41
2

The patch did not work for me and I had to replace the bsddb folder in /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7

with the bsddb3 in:

/usr/local/lib/python2.7/site-packages/bsddb3

Make sure you backup the bsddb folder just in case.

rafaelvalle
  • 6,683
  • 3
  • 34
  • 36
2

This pain persists on OSX 10.8. I could not install bsddb3 using macports py-bsddb3 into a virtualenv. What was very simple and did work is:

  • install db53 from macports
  • download and unpack bsddb3 source (https://pypi.python.org/pypi/bsddb3/6.1.0)
  • sudo python setup.py –berkeley-db-incdir=/opt/local/include/db53 –berkeley-db-libdir=/opt/local/lib/db53 install
rhoerbe
  • 463
  • 1
  • 4
  • 17
0

The error I had was "No module named _bsddb". It turn out I didn't need to upgrade my bsddb. I wasusing the .pkl file created in windows. After renaming the pkl file to get it out the way Mac OSX Python recreated a new .pkl.db file and now it works perfectly.

Teddy
  • 1
  • 1
0

A solution I found was to install ActivePython, dig into its library (located in /Library/Frameworks/Python.framework/Versions/....your version here..../lib) and copy and paste the _bsddb.so file into my OS X 10.6 native python 2.6 install directory (/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/).

That fixed the missing _bsddb issue leaving me with a working version of bsddb in my native python install. Then, I just uninstalled ActivePython (instructions here)

lef
  • 9
  • 1