I am building python (version 3.5) from source in order to get the latest version. I can
$>./configure --prefix=/my/prefix && make
Python build finished successfully!
The necessary bits to build these optional modules were not found:
_bz2 _lzma _sqlite3
_ssl _tkinter readline
To find the necessary bits, look in setup.py in detect_modules() for the module's name.
$> find / -name libsqlite3.so
$> find / -name sqlite3.h
$> echo $LD_LIBRARY_PATH
$> echo $LDFLAGS
$> echo $CFLAGS
./configure --prefix=/my/prefix --enable-loadable-sqlite-extensions && make
setup.py script does not check any environment variables for the location of the
sqlite3.h file or any other related files, and therefore changing environment variables is insufficient to allow python to find the files, unless
sqlite3-dev packages are installed into the "standard" directories.
The following snippet of possible
include directories for sqlite3 is taken from
setup.py (for Python-3.5.0):
sqlite_inc_paths = ['/usr/include', '/usr/include/sqlite', '/usr/include/sqlite3', '/usr/local/include', '/usr/local/include/sqlite', '/usr/local/include/sqlite3', ]
From that, its clear that if sqlite3 is not installed in a "standard" system location such as /usr or /usr/local, then the header files will not be found.
To fix the issue, add in
/path/to/my/personal/sqlite/include into the above
sqlite_inc_paths = ['/path/to/my/personal/sqlite/include', ...]
And sqlite module will be found.
Automated install. To automate the above change, a perl one liner can be used to make the above change:
$> perl -pi.orig -e "s|(?<=sqlite_inc_paths = )\[|['/path/to/my/personal/sqlite/include',\n|" setup.py
sed can also be used, but the
-i in-place flag doesn't work on all systems.