Installing Python 3.1.2 from source, how do you resolve the sqlite3-dev dependency?

Philip Semanchuk philip at semanchuk.com
Wed Jun 16 14:06:08 EDT 2010


On Jun 16, 2010, at 1:29 PM, Trevor wrote:

> Running ubuntu 9.04 "jaunty".
>
> When I run make I get the following error:
>
>    Python build finished, but the necessary bits to build these
> modules were not found:
>    _sqlite3
>
>
> So the easy solution is to just install the missing dependency using
> apt-get, "sudo apt-get -f install libsqlite3-dev" but I get the
> following error:
>
>    The following packages have unmet dependencies:
>      libsqlite3-dev: Depends: libsqlite3-0 (= 3.6.10-1) but
> 3.6.10-1ubuntu0.2 is to be installed
>    E: Broken packages
>
> I tried uninstalling "libsqlite3-0" but synaptic said many things
> needed it (50+).
>
> So now I am stuck. I can't install the missing dependency. And
> therefore I can not install python 3.1.2.
>
> **Any ideas on how to fix the missing libsqlite3-dev dependency?**

Hi Trevor,
I'm a Mac guy using Python 2.x, but a solution that I found might work  
for you too.

Python can link to SQLite statically or dynamically. I needed my  
Python to use a specific (old) version of SQLite, different from the  
one shipped with OS X. I downloaded the SQLite version I needed and  
compiled it like this:

sudo ./configure --enable-threadsafe --enable-tempstore --enable- 
shared=no --enable-static=yes

That created these static-friendly libs in /usr/local/lib:
libsqlite3.a
libsqlite3.la

So far, so good. Now comes the ugly part...I was unable to find a  
configure/Makefile option to force Python to link SQLite statically. I  
was working with Python 2.x, and maybe there's a way to do it that I  
just didn't find, or maybe Python 3.x offers that option. The trick I  
had to resort to was to temporarily rename all of the SQLite dynamic  
libraries on my system and then rebuild Python. Since Python only  
found the SQLite static libs, it linked them into the Python binary.  
After that I could undo my renaming of the SQLite dynamic libs and  
restore my system to normal. Good thing nothing was trying to load  
those libraries while I had them renamed!

Obviously this is a crude process and there's probably a better way to  
do it. In fact, I encourage you to look for a better way to do it and  
let us know about it. That way I won't have to risk screwing up my OS  
by renaming system libraries. =)

Good luck
Philip





More information about the Python-list mailing list