I want to install the latest Python tarball on Ubuntu, downloaded from http://python.org/download/.
Is this is a correct way to install?
./configure
make
make install
If not, how do I do that?
I want to install the latest Python tarball on Ubuntu, downloaded from http://python.org/download/.
Is this is a correct way to install?
./configure
make
make install
If not, how do I do that?
First, install some dependencies:
sudo apt-get install build-essential checkinstall
sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev
Then download using the following command:
version=2.7.13
cd ~/Downloads/
wget https://www.python.org/ftp/python/$version/Python-$version.tgz
Extract and go to the directory:
tar -xvf Python-$version.tgz
cd Python-$version
Now, install using the command you just tried, using checkinstall
instead to make it easier to uninstall if needed:
./configure
make
sudo checkinstall
Change version
to whichever version you need (version=2.7.1
or version=3.6.0
, for example).
sudo make install
and not altinstall
to set it as default python version
Commented
Jul 22, 2013 at 14:35
CXX=g++ ./configure
if ./configure issues a warning saying g++ was not found
sudo apt-get install python
, the more complicated answer is "how to install the latest python", the implication being "from source". You'll have the same issue on any OS unless you're installing precompiled binaries from a 3rd party, which, again, is risky on any OS (and varies greatly across different OS). Also this answer is from 2012; for more recent advice, see askubuntu.com/questions/101591/…
Unless you really have a burning desire to compile it yourself, the preferred way is to use the DeadSnakes PPA to install versions of Python that aren't included by default:
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install python2.7
Other versions, such as python2.4
or python3.6
, etc. are also available.
ppa
is not officially endorsed, so the most secure way is to build from source. 2. this will result in a global python, that non-sudo
ers cannot modify or install packages to, not a local one. 3. Multiple pythons can be installed locally at different locations by building from source.
apt-get install python2.7
This install the binary python2.7 instead of python...ugly!!
Continuing to document this for the latest Ubuntu releases1 : for Ubuntu 16.04.1 server, the default Python is version 3.5, and Python 2.7 is not installed by default. On a fresh install (note that there's not even a python
executable):
$ type python3 python2 python
python3 is /usr/bin/python3
-bash: type: python2: not found
-bash: type: python: not found
$ python3 --version
Python 3.5.2
$ python --version
The program 'python' can be found in the following packages:
* python-minimal
* python3
Try: sudo apt install <selected package>
Note: before continuing, you will probably want to do a quick sudo apt-get update
, sudo apt-get upgrade
, and sudo apt-get dist-upgrade
(please do note exactly what these commands are in fact doing; I'm assuming a fresh install here.)
Installing python 2.7 is as easy as:
$ sudo apt-get install python2.7
The initial output of installing python 2.7 is as follows:
$ sudo apt-get install python2.7
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
libpython2.7-minimal libpython2.7-stdlib python2.7-minimal
Suggested packages:
python2.7-doc binutils binfmt-support
The following NEW packages will be installed:
libpython2.7-minimal libpython2.7-stdlib python2.7 python2.7-minimal
0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
Need to get 3,735 kB of archives.
After this operation, 15.8 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
...etc, etc...
After installing python 2.7,
$ type python3 python2.7 python3.5 python2 python
python3 is /usr/bin/python3
python2.7 is /usr/bin/python2.7
python3.5 is /usr/bin/python3.5
bash: type: python2: not found
bash: type: python: not found
But there's still a problem, since you can't yet install PyPI modules via pip
-- e.g., if you want jupyter notebook, or the latest scipy or numpy (etc), you'll want to install pip
and then pip install
those, and still turning to apt-get
to install any needed system dependencies, like graphviz or core system libraries.
$ type pip3 pip2 pip
bash: type: pip3: not found
bash: type: pip2: not found
bash: type: pip: not found
$ python3 -m pip --version
/usr/bin/python3: No module named pip
So to install pip, again, it's as easy as sudo apt-get install python-pip
:
$ sudo apt-cache search -n pip | egrep '^python[0-9]*-pip'
python-pip - alternative Python package installer
python-pip-whl - alternative Python package installer
python3-pip - alternative Python package installer - Python 3 version of the package
You'll need both python-pip
for the Python 2.7 pip
and the python3-pip
for the Python 3 pip
. The installation via apt-get
is sure to install the required dependencies; e.g, here's the output for installing pip2:
$ sudo apt-get install python-pip
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
binutils build-essential dpkg-dev fakeroot g++ g++-5 gcc gcc-5 libalgorithm-diff-perl
libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan2 libatomic1 libc-dev-bin libc6-dev
libcc1-0 libcilkrts5 libdpkg-perl libexpat1-dev libfakeroot libfile-fcntllock-perl libgcc-5-dev
libgomp1 libitm1 liblsan0 libmpx0 libpython-all-dev libpython-dev libpython-stdlib libpython2.7
libpython2.7-dev libquadmath0 libstdc++-5-dev libtsan0 libubsan0 linux-libc-dev make
manpages-dev python python-all python-all-dev python-dev python-minimal python-pip-whl
python-pkg-resources python-setuptools python-wheel python2.7-dev
Suggested packages:
binutils-doc debian-keyring g++-multilib g++-5-multilib gcc-5-doc libstdc++6-5-dbg gcc-multilib
autoconf automake libtool flex bison gdb gcc-doc gcc-5-multilib gcc-5-locales libgcc1-dbg
libgomp1-dbg libitm1-dbg libatomic1-dbg libasan2-dbg liblsan0-dbg libtsan0-dbg libubsan0-dbg
libcilkrts5-dbg libmpx0-dbg libquadmath0-dbg glibc-doc libstdc++-5-doc make-doc python-doc
python-tk python-setuptools-doc
The following NEW packages will be installed:
binutils build-essential dpkg-dev fakeroot g++ g++-5 gcc gcc-5 libalgorithm-diff-perl
libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan2 libatomic1 libc-dev-bin libc6-dev
libcc1-0 libcilkrts5 libdpkg-perl libexpat1-dev libfakeroot libfile-fcntllock-perl libgcc-5-dev
libgomp1 libitm1 liblsan0 libmpx0 libpython-all-dev libpython-dev libpython-stdlib libpython2.7
libpython2.7-dev libquadmath0 libstdc++-5-dev libtsan0 libubsan0 linux-libc-dev make
manpages-dev python python-all python-all-dev python-dev python-minimal python-pip
python-pip-whl python-pkg-resources python-setuptools python-wheel python2.7-dev
0 upgraded, 49 newly installed, 0 to remove and 0 not upgraded.
Need to get 61.1 MB of archives.
After this operation, 169 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
...etc...
An interesting thing happens as a result of this: you now have the "standard" (and PEP recommended) python2
and python3
(which are just symlinks to python 2.7 and python 3.5):
$ type python3 python2 python python2.7 python3.5
python3 is /usr/bin/python3
python2 is /usr/bin/python2
python is /usr/bin/python
python2.7 is /usr/bin/python2.7
python3.5 is /usr/bin/python3.5
You'll also want to sudo apt-get install python3-pip
; before you install, you have:
$ type pip pip2 pip3
pip is /usr/bin/pip
pip2 is /usr/bin/pip2
-bash: type: pip3: not found
$ python2 -m pip --version
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)
$ python3 -m pip --version
/usr/bin/python3: No module named pip
After installing pip3
,
$ sudo apt-get install python3-pip
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
libpython3-dev libpython3.5-dev python3-dev python3-setuptools python3-wheel python3.5-dev
Suggested packages:
python-setuptools-doc
The following NEW packages will be installed:
libpython3-dev libpython3.5-dev python3-dev python3-pip python3-setuptools python3-wheel python3.5-dev
0 upgraded, 7 newly installed, 0 to remove and 0 not upgraded.
Need to get 38.0 MB of archives.
After this operation, 55.2 MB of additional disk space will be used.
Do you want to continue? [Y/n]
...etc...
The resulting versions:
$ type python python2 python3 pip pip2 pip3
python is /usr/bin/python
python2 is hashed (/usr/bin/python2)
python3 is hashed (/usr/bin/python3)
pip is /usr/bin/pip
pip2 is /usr/bin/pip2
pip3 is /usr/bin/pip3
$ pip --version
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)
$ pip3 --version
pip 8.1.1 from /usr/lib/python3/dist-packages (python 3.5)
$ python2 -m pip --version
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)
$ python3 -m pip --version
pip 8.1.1 from /usr/lib/python3/dist-packages (python 3.5)
And one last thing before you can go and start installing all your favorite python PyPI modules: you'll probably have to upgrade pip itself (both pip2 and pip3, separately; also, it doesn't matter if pip
is invoked via the python
executables or the pip
executables, the actual upgrades are stored in /usr/lib
):
$ sudo -H python2 -m pip install --upgrade pip
...
$ sudo -H python3 -m pip install --upgrade pip
...
You can now run either the stand-alone pip
or the version bundled within python
(via python -m pip {command}
).
[1] Historical recap: older Ubuntu had only Python 2.6, thus all the various methods to get Python 2.7+ installed. Later, after Python 2.7 was added to the public repositories, we still had the same challenge to install the newest Python 2.7 with latest fixes, which was (too) frequently necessary. The situation today is much better/simpler: the current Python 2.7 & 3.5 (basically the only two Python platform versions people care about) that are now in the public repos are very stable, so now we really only have to worry about installing the latest python modules, not the latest python. So now the Python "latest version problem" has moved partly out of the OS repos & apt
and into PyPI & pip
.)
$PATH
. The env var PATH
is a long list of directories with literally thousands of files therein. To speed up finding the executable, the shell uses a cached hashtable for quick lookup. It could become stale, so "hashed" lets you know that it's "remembered" this command mapped to that executable file unix.stackexchange.com/questions/5609/…
pip
(2.7) & pip3
(3.x) were completely installed/upgraded, and not just the former -- i.e., sudo apt-get install python-pip python3-pip
and sudo -H python2 -m pip install --upgrade pip
and sudo -H python3 -m pip install --upgrade pip
...Or if it really is a permission issue (indicated by "it works with sudo"), then it's going to be a little more difficult to track down.
12.04
If you are following Achu's answer, then the term libread5-dev
should be changed to libreadline-gplv2-dev
. So the full command would be:
sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev
You can also download and install it via pyenv
#Install Pyenv
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
export PATH=~/.pyenv/bin:/usr/local/hadoop/bin/:$PATH
echo 'export PYENV_ROOT="~/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
#Install Python
pyenv install 2.7.8
pyenv global 2.7.8
pyenv install 3.4.5
pyenv global 3.4.5
pyenv-virtualenv
plugin, making it easy to install applications with different module requirements without clashes.
bash --login
), which is not always easy to achieve e.g. from Ansible. Best for interactive use, less good for scripting servers.
Mostly a mirror of this answer with a tweaked intro
I would recommend pyenv. It automates the build process aside from installing the header dependencies (see below). You can build and install a new (or old) version of Python by simply saying pyenv install 3.6.0
. Everything runs as your user, so you don't have to worry about messing up the Python used by Ubuntu itself.
As opposed to some of the apt-repo-based options (e.g. deadsnakes), it will generally work same day of a release after a pyenv update
because you don't need to wait for someone else to package it. See all the versions you can install with pyenv install --list
Install tools and headers needed to build CPythons (exotic Pythons like PyPy or Jython may have other dependencies). Git is used by pyenv, plus it also enables builds/installs of source branches, so you could install whatever 3.8 is right now, i.e. the master branch of CPython fresh off GitHub:
sudo apt-get install -y git
sudo apt-get install -y build-essential libbz2-dev libssl-dev libreadline-dev \
libffi-dev libsqlite3-dev tk-dev
# optional scientific package headers (for Numpy, Matplotlib, SciPy, etc.)
sudo apt-get install -y libpng-dev libfreetype6-dev
Run the installer script (installs pyenv and some very useful pyenv plugins by the original author; see here for more)
curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
Add init lines to your ~/.profile
or ~/.bashrc
(it mentions it at the end of the install script):
export PATH="~/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
Restart your shell (close & open or exec $SHELL
) or reload the profile script. (with e.g. source ~/.bashrc
)
Done!
To not touch the system Python (generally a bad idea; OS-level services might be relying on some specific library versions, etc.) make your own environment, it's easy! Even better, no sudo
, for it or pip
installs!
Install your preferred Python version (this will download the source and build it for your user, no input required)
pyenv install 3.6.0
Make it a virtualenv so you can make others later if you want
pyenv virtualenv 3.6.0 general
Make it globally active (for your user)
pyenv global general
Do what you want to with the Python/pip, etc. It's yours.
If you want to clean out your libraries later, you could delete the virtualenv (pyenv uninstall general
) or make a new one (pyenv virtualenv 3.6.0 other_proj
). You can also have environments active per-directory: pyenv local other_proj
will drop a .python-version
file into your current folder and any time you invoke Python or pip-installed Python utilities from it or under it, they will be shimmed by pyenv.
bash: pyenv: command not found
, fish: Unknown command 'pyenv'
$PATH
, there should be one entry that ends in something like .pyenv/bin
. If it's missing make sure you followed #3 AND #4 (restart your shell) under Install pyenv above.pyenv: no such command 'virtualenv'
pyenv commands
.
sudo apt-get install python-2.7 python-pip
sudo apt-get install python2.7
. This is not only easier, it's the only correct answer, since it's the only way you'll be able to handle installing python modules via apt-get and their dependencies in turn.