Ubuntu comes with Python 2.7.2+ pre-installed. (I also downloaded the python dev packages.) Because of another issue I'm having (Explained in extreme depth in How do I replace/update the version of the expat library used by Apache? ), Graham Dumpleton told me my distro had explicitly built Python in a way to use an external pyexpat implementation, so causing my issue. He also said I could build Python myself from source code to resolve the issue. How would I do this on Ubuntu? (Keep in mind I'm new to Linux.)
-
If you don't get an answer here, this question may be seen by more Ubuntu folks at askubuntu.com – Eric Wilson Nov 11 '11 at 16:45
-
1This is not really ubuntu specific so I think it's fine over here. The various stack exchange sites have considerable overlap in my opinion. – Noufal Ibrahim Nov 11 '11 at 16:51
5 Answers
At a shell prompt (in a terminal), run
sudo apt-get install build-essential
This will fetch all the common packages you need to build anything (e.g. the compiler etc.).
Then run
sudo apt-get build-dep python2.7
This will fetch all the libraries you need to build python.
Then download the source code for python and decompress it into a directory.
go there and run
./configure --prefix=/path/where/you/want/python/installed
Then
make
and thenmake install
to get it built and installed:make && make install
If you hit snags on the way, ask back here and I'll try to offer some guidance.

- 15,099
- 2
- 27
- 47

- 71,383
- 13
- 135
- 169
-
2When I ran `sudo apt-get build-dep python2.7` it said "E: You must put some 'source' URIs in your sources.list". Any idea? (Also, minor side note: I think you meant to write `sudo apt-get install build-essential` without the -s at the end of "essentials" in the first command.) – Brian Schmitz Nov 11 '11 at 20:27
-
2They also need the --enable-shared option when building Python as they want to use it with mod_wsgi and Python doesn't build shared libraries by default which isn't ideal for dynamically loading embedded systems. – Graham Dumpleton Nov 11 '11 at 22:08
-
What are "they"? What are you referring to? Also, before that, how do I resolve the error message? Do I need to add something to sources.list? – Brian Schmitz Nov 11 '11 at 22:55
-
3Brian: You might need to add the `deb-src` lines along with the `deb` lines in your `sources.list`. – Noufal Ibrahim Nov 12 '11 at 05:45
-
2I think its better to altinstall instead of install https://docs.python.org/3/using/unix.html#building-python – Omid Zarinmahd Jul 15 '19 at 07:01
The best way to build "hot" very recent python (from github) is as follows:
sudo apt-get update \
&& sudo apt-get install -y build-essential git libexpat1-dev libssl-dev zlib1g-dev \
libncurses5-dev libbz2-dev liblzma-dev \
libsqlite3-dev libffi-dev tcl-dev linux-headers-generic libgdbm-dev \
libreadline-dev tk tk-dev
git clone https://github.com/python/cpython.git
cd cpython && ./configure --prefix=/usr \
--enable-loadable-sqlite-extensions \
--enable-shared \
--with-lto \
--enable-optimizations \
--with-system-expat \
--with-system-ffi \
--enable-ipv6 --with-threads --with-pydebug --disable-rpath \
&& make \
&& sudo make install
It builds the very recent python from the sources on github.
With this I have built Python 3.8.0a0 (heads/master:077059e0f0, Aug 10 2018, 21:36:32)
.

- 3,079
- 1
- 17
- 29
-
5I would run sudo make altinstall so you do not overwrite the system default python3 version. If you for example execute make install on Ubuntu 18.04 you will overwrite /usr/bin/python3 – Olav Grønås Gjerde Jul 17 '18 at 18:22
-
For building w/ pydebug, your `make` should be `make EXTRA_CFLAGS="-DPy_REF_DEBUG"` – hjpotter92 Aug 16 '18 at 08:41
-
1On my Xubuntu 18.04 machine using Python 3.7.0 source it says `WARNING: unrecognized options: --with-threads`. – orlp Oct 06 '18 at 01:16
-
will this build with bz2? I am running into this issue while trying to import pandas.. thanks. – ScipioAfricanus Sep 23 '19 at 18:12
-
You may try using pyenv. I haven't tried it yet. But looking at the sources, it seems very mature to accomplish an installation of any CPython-interpreter on any *ix-system.

- 3,716
- 1
- 30
- 43
-
I agree, if your serious about development with python you'll find yourself using multiple versions, and pyenv takes care of this for you. but you really want to install pyenv first before installing any version of python (if possible...) – monkut Feb 13 '19 at 13:02
The superior solution to building Python yourself is pythonbrew, which automates the process and also allows you to not only install several different versions, but also easily select between them.
In 2016, pyenv and PyRun are the most viable solutions.

- 4,120
- 1
- 18
- 13
-
2+1 for the tool. How mature is it? Do you have personal experience? – Noufal Ibrahim Nov 13 '11 at 13:00
-
@NoufalIbrahim: I use [`pythonz`](https://github.com/saghul/pythonz) (a simplified fork of `pythonbrew`). It works as advertised: it automates the process of downloading the sources and building them by hand. – jfs Sep 04 '14 at 15:15
-
3
You can use checkinstall to install from source code instead of make install.
Once you download the source code, navigate to the home folder and use below commands
./configure
make
sudo checkinstall
This creates a debian / RPM package and then installs it. Checkinstall keeps a tab of all the files modifications and dependencies and makes the whole uninstalling process easier. Since you have a .deb package, it's much easier to install on many systems and handle with a package manager.

- 193
- 1
- 1
- 11