Here we are going compile
python from source. I assume you have a clean installation of Debian testing. Here are few packages required for compilation.
apt-get -y install build-essential zlib1g-dev libbz2-dev \
libncurses5-dev libreadline-gplv2-dev libsqlite3-dev \
libssl-dev libgdbm-dev
Once above installation is complete, download python source code from here:
http://www.python.org/ftp/python/.
Suppose you choose to download python 2.5.2.
cd /usr/local/src
wget http://www.python.org/ftp/python/2.5.2/Python-2.5.2.tar.bz2
tar xjf Python-2.5.2.tar.bz2
cd Python-2.5.2
Since most of libraries in Debian moved from /usr/lib to /usr/lib/i386-linux-gnu we need create symbolic links in old location so the build scripts can find them all. This is far easier than specify a valid library location for each case. Here are links:
ln -s /usr/lib/i386-linux-gnu/libssl.so \
/usr/lib/libssl.so
ln -s /usr/lib/i386-linux-gnu/libcrypt.so \
/usr/lib/libcrypt.so
ln -s /usr/lib/i386-linux-gnu/libcrypto.so \
/usr/lib/libcrypto.so
ln -s /usr/lib/i386-linux-gnu/libbz2.so \
/usr/lib/libbz2.so
ln -s /usr/lib/i386-linux-gnu/libgdbm.so \
/usr/lib/libgdbm.so
ln -s /usr/lib/i386-linux-gnu/libcurses.so \
/usr/lib/libcurses.so
ln -s /usr/lib/i386-linux-gnu/libz.so \
/usr/lib/libz.so
ln -s /usr/lib/i386-linux-gnu/libsqlite3.so \
/usr/lib/libsqlite3.so
Compilation
Before we start compile we need to configure it first. You can run it with all defaults (this will install python to
/usr/local/).
./configure
Or you can specify some other location:
./configure --prefix=/usr/local
The configuration process take few seconds. Next issue make command to actually compile it (this may take few minutes). The
-s option prints warning only and
-j 2 utilizes 2 CPU cores during the compilation).
make -s -j 2
You can optionally test it before installing with:
make test
or run specific tests of your interest:
./python Lib/test/test_hashlib.py
Install
make install
Python executable should be located at
/usr/local/bin/python2.5.
Extra Packages
While python is perfectly working at this moment you might need install some extra packages (e.g. virtualenv) with
easy_install.
wget -O - -q http://python-distribute.org/distribute_setup.py | python2.5
easy_install-2.5 virtualenv
This way you can install as many python versions as you like.
Troubleshooting
While working with some third party package (e.g. django) you got the following error:
ImportError: ...undefined symbol: PyUnicodeUCS2_Replace
There reason is described
here. You have to re-configure the python:
./configure --enable-unicode=ucs4
and build/install it again.
AttributeError: 'NoneType' object has no attribute 'rfind'. This issue in Debian can be fixed by adding '/usr/lib/i386-linux-gnu/' to lib_dirs list in setup.py.
ReplyDelete