python build from source: cannot build optional module sqlite3
This link provided the solution for me building Python 3.5. Specifically for Ubuntu but helped figure it out for CentOS6 as well.
Install missing packages before compiling Python3
More specifically for Ubuntu server 16.04:
for pkg in build-essential zlib1g-dev libbz2-dev liblzma-dev libncurses5-dev libreadline6-dev libsqlite3-dev libssl-dev libgdbm-dev liblzma-dev tk8.5-dev lzma lzma-dev libgdbm-dev do apt-get -y install $pkg done
The 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
array:
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.