How do I install the latest Python 2.7.X or 3.X on Ubuntu?
up vote
164
down vote
favorite
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?
software-installation python
|
show 1 more comment
up vote
164
down vote
favorite
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?
software-installation python
1
At one time, I imagine this was asked in order to install a newer version of python on Ubuntu. Now, it's required to install an older version of python on Ubuntu (because we still require python 2.7 for a lot of things)... tl;dr: this answer is no longer current/correct. Instead, assuming python3 is installed by default (and perhaps a minimal python2.x), then run:sudo apt-get install python-2.7 python-pip
– michael
Sep 20 '16 at 13:00
@michael_n what are you talking about? compiling from source does not make this answer incorrect or outdated. its just a different method. you can use apt to automate the process for you if needed.
– user383919
Sep 29 '16 at 1:23
u use what u need. I dont really see how this supports your claim of this being outdated. like you said yourself, u use it when you need to because it may not be available. For instance, windows subsystem for linux uses some dated software packages even tho the distro is ubuntu 16.04.1 (beta) and uses python2.6.2, and python3 even tho the current is python2.7.12. In thay case, I should compil if I want up-to-date packages
– user383919
Sep 29 '16 at 3:34
1
@jargonjunkie you're off-topic, but correct. If the question is "how do I install python 2.7 on ubuntu 16.04+" which it is (since 16.04 is now available, which is my point), then you simplysudo 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.
– michael
Sep 29 '16 at 6:07
hope this helps illustrate (added answer). the python ecosystem is very particular/finicky, and you can easily get into "dependency hell" if you don't carefully construct your python environment askubuntu.com/a/831075/17060
– michael
Sep 29 '16 at 8:54
|
show 1 more comment
up vote
164
down vote
favorite
up vote
164
down vote
favorite
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?
software-installation python
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?
software-installation python
software-installation python
edited Mar 30 '17 at 1:36
muru
135k19288488
135k19288488
asked Feb 5 '12 at 12:02
mohammads
1,15421016
1,15421016
1
At one time, I imagine this was asked in order to install a newer version of python on Ubuntu. Now, it's required to install an older version of python on Ubuntu (because we still require python 2.7 for a lot of things)... tl;dr: this answer is no longer current/correct. Instead, assuming python3 is installed by default (and perhaps a minimal python2.x), then run:sudo apt-get install python-2.7 python-pip
– michael
Sep 20 '16 at 13:00
@michael_n what are you talking about? compiling from source does not make this answer incorrect or outdated. its just a different method. you can use apt to automate the process for you if needed.
– user383919
Sep 29 '16 at 1:23
u use what u need. I dont really see how this supports your claim of this being outdated. like you said yourself, u use it when you need to because it may not be available. For instance, windows subsystem for linux uses some dated software packages even tho the distro is ubuntu 16.04.1 (beta) and uses python2.6.2, and python3 even tho the current is python2.7.12. In thay case, I should compil if I want up-to-date packages
– user383919
Sep 29 '16 at 3:34
1
@jargonjunkie you're off-topic, but correct. If the question is "how do I install python 2.7 on ubuntu 16.04+" which it is (since 16.04 is now available, which is my point), then you simplysudo 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.
– michael
Sep 29 '16 at 6:07
hope this helps illustrate (added answer). the python ecosystem is very particular/finicky, and you can easily get into "dependency hell" if you don't carefully construct your python environment askubuntu.com/a/831075/17060
– michael
Sep 29 '16 at 8:54
|
show 1 more comment
1
At one time, I imagine this was asked in order to install a newer version of python on Ubuntu. Now, it's required to install an older version of python on Ubuntu (because we still require python 2.7 for a lot of things)... tl;dr: this answer is no longer current/correct. Instead, assuming python3 is installed by default (and perhaps a minimal python2.x), then run:sudo apt-get install python-2.7 python-pip
– michael
Sep 20 '16 at 13:00
@michael_n what are you talking about? compiling from source does not make this answer incorrect or outdated. its just a different method. you can use apt to automate the process for you if needed.
– user383919
Sep 29 '16 at 1:23
u use what u need. I dont really see how this supports your claim of this being outdated. like you said yourself, u use it when you need to because it may not be available. For instance, windows subsystem for linux uses some dated software packages even tho the distro is ubuntu 16.04.1 (beta) and uses python2.6.2, and python3 even tho the current is python2.7.12. In thay case, I should compil if I want up-to-date packages
– user383919
Sep 29 '16 at 3:34
1
@jargonjunkie you're off-topic, but correct. If the question is "how do I install python 2.7 on ubuntu 16.04+" which it is (since 16.04 is now available, which is my point), then you simplysudo 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.
– michael
Sep 29 '16 at 6:07
hope this helps illustrate (added answer). the python ecosystem is very particular/finicky, and you can easily get into "dependency hell" if you don't carefully construct your python environment askubuntu.com/a/831075/17060
– michael
Sep 29 '16 at 8:54
1
1
At one time, I imagine this was asked in order to install a newer version of python on Ubuntu. Now, it's required to install an older version of python on Ubuntu (because we still require python 2.7 for a lot of things)... tl;dr: this answer is no longer current/correct. Instead, assuming python3 is installed by default (and perhaps a minimal python2.x), then run:
sudo apt-get install python-2.7 python-pip– michael
Sep 20 '16 at 13:00
At one time, I imagine this was asked in order to install a newer version of python on Ubuntu. Now, it's required to install an older version of python on Ubuntu (because we still require python 2.7 for a lot of things)... tl;dr: this answer is no longer current/correct. Instead, assuming python3 is installed by default (and perhaps a minimal python2.x), then run:
sudo apt-get install python-2.7 python-pip– michael
Sep 20 '16 at 13:00
@michael_n what are you talking about? compiling from source does not make this answer incorrect or outdated. its just a different method. you can use apt to automate the process for you if needed.
– user383919
Sep 29 '16 at 1:23
@michael_n what are you talking about? compiling from source does not make this answer incorrect or outdated. its just a different method. you can use apt to automate the process for you if needed.
– user383919
Sep 29 '16 at 1:23
u use what u need. I dont really see how this supports your claim of this being outdated. like you said yourself, u use it when you need to because it may not be available. For instance, windows subsystem for linux uses some dated software packages even tho the distro is ubuntu 16.04.1 (beta) and uses python2.6.2, and python3 even tho the current is python2.7.12. In thay case, I should compil if I want up-to-date packages
– user383919
Sep 29 '16 at 3:34
u use what u need. I dont really see how this supports your claim of this being outdated. like you said yourself, u use it when you need to because it may not be available. For instance, windows subsystem for linux uses some dated software packages even tho the distro is ubuntu 16.04.1 (beta) and uses python2.6.2, and python3 even tho the current is python2.7.12. In thay case, I should compil if I want up-to-date packages
– user383919
Sep 29 '16 at 3:34
1
1
@jargonjunkie you're off-topic, but correct. If the question is "how do I install python 2.7 on ubuntu 16.04+" which it is (since 16.04 is now available, which is my point), then you simply
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.– michael
Sep 29 '16 at 6:07
@jargonjunkie you're off-topic, but correct. If the question is "how do I install python 2.7 on ubuntu 16.04+" which it is (since 16.04 is now available, which is my point), then you simply
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.– michael
Sep 29 '16 at 6:07
hope this helps illustrate (added answer). the python ecosystem is very particular/finicky, and you can easily get into "dependency hell" if you don't carefully construct your python environment askubuntu.com/a/831075/17060
– michael
Sep 29 '16 at 8:54
hope this helps illustrate (added answer). the python ecosystem is very particular/finicky, and you can easily get into "dependency hell" if you don't carefully construct your python environment askubuntu.com/a/831075/17060
– michael
Sep 29 '16 at 8:54
|
show 1 more comment
6 Answers
6
active
oldest
votes
up vote
187
down vote
accepted
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).
18
Usesudo make installand notaltinstallto set it as default python version
– Shagun Sodhani
Jul 22 '13 at 14:35
useCXX=g++ ./configureif ./configure issues a warning saying g++ was not found
– srj
Nov 7 '14 at 11:55
1
after installing as instructed above, what commands do I run in the console to check that indeed it is installed?
– J86
Jan 29 '15 at 10:51
8
It's quite extraordinary that the best answer to the simple question "how to install Python" would carry such terrible warning, it's like "this is the best way we know to install Python and it might very well break your system"... It's also very surprising that the official Python website has loads of downloads and not a single page of install instructions.
– patb
May 30 '17 at 12:03
4
pat -- the best answer to the simple question "how to install python" issudo 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/…
– michael
Oct 29 '17 at 5:22
|
show 5 more comments
up vote
168
down vote
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.
13
Program note: If you're on 10.04, you may need to install python-software-properties prior to using add-apt-repository.
– Craig Maloney
Apr 9 '12 at 19:59
3
It's recommended to build python in your local environment, instead of installing it from pre-build binaries
– pylover
Oct 22 '13 at 1:10
13
+1 :)really have a burning desire to compile it yourself
– Watt
Nov 13 '13 at 22:35
5
Missed to mention that: 1. theppais not officially endorsed, so the most secure way is to build from source. 2. this will result in a global python, that non-sudoers cannot modify or install packages to, not a local one. 3. Multiple pythons can be installed locally at different locations by building from source.
– Ioannis Filippidis
Aug 9 '14 at 1:06
2
apt-get install python2.7This install the binary python2.7 instead of python...ugly!!
– Dhawal
Dec 24 '15 at 19:35
|
show 8 more comments
up vote
24
down vote
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.)
2
Following this instructions on Ubuntu 16.04.1 LTS successfully setup python 2.7 and pip like this: sudo apt-get install python2.7; sudo apt-get install python-pip; sudo -H python2 -m pip install --upgrade pip; # Checking version: $ pip --version -> pip 9.0.1 from /usr/local/lib/python2.7/dist-packages (python 2.7); $ python --version -> Python 2.7.12
– Robert Lujo
Mar 3 '17 at 10:55
Really helpful answer - thanks a lot!
– Failed Scientist
Oct 7 '17 at 13:30
Pardon my ignorance but may I know what does "hashed" mean when showing Python versions?
– Failed Scientist
Oct 7 '17 at 13:33
1
@TalhaIrfan It's a good question (and, if you'll allow a simplified answer): when a command is typed in bash (as w/ most shells), the cmd could be an alias, function, or executable file found in the$PATH. The env varPATHis 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/…
– michael
Oct 8 '17 at 7:54
1
@gaia you may want to ask a separate question, since more back & forth may be required to figure it out (or if anything has changed since I wrote this up). Perhaps, first verify that bothpip(2.7) &pip3(3.x) were completely installed/upgraded, and not just the former -- i.e.,sudo apt-get install python-pip python3-pipandsudo -H python2 -m pip install --upgrade pipandsudo -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.
– michael
Jul 30 at 8:24
|
show 3 more comments
up vote
11
down vote
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
add a comment |
up vote
4
down vote
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
This is the cleanest way to get a really up to date version of Python on an older version of Ubuntu. It includes virtualenv support as well, via thepyenv-virtualenvplugin, making it easy to install applications with different module requirements without clashes.
– RichVel
May 6 '17 at 15:35
Two warnings about pyenv: (1) it only works from a bash shell (or maybe zsh, but certainly not dash which is /bin/sh on Ubuntu), and (2) it requires a login shell (e.g.bash --login), which is not always easy to achieve e.g. from Ansible. Best for interactive use, less good for scripting servers.
– RichVel
May 8 '17 at 7:10
add a comment |
up vote
0
down vote
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 pyenv
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
~/.profileor~/.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!
Setting up an environment
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.
Troubleshooting
bash: pyenv: command not found,fish: Unknown command 'pyenv'
- Check your
$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.
- Check your
pyenv: no such command 'virtualenv'
- If you didn't use the installer script, you likely only installed the root pyenv package. See pyenv-virtualenv for instructions to add the plugin
- If you used the installer script, check if it shows up with
pyenv commands.
add a comment |
protected by Community♦ Jan 31 '15 at 0:21
Thank you for your interest in this question.
Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).
Would you like to answer one of these unanswered questions instead?
6 Answers
6
active
oldest
votes
6 Answers
6
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
187
down vote
accepted
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).
18
Usesudo make installand notaltinstallto set it as default python version
– Shagun Sodhani
Jul 22 '13 at 14:35
useCXX=g++ ./configureif ./configure issues a warning saying g++ was not found
– srj
Nov 7 '14 at 11:55
1
after installing as instructed above, what commands do I run in the console to check that indeed it is installed?
– J86
Jan 29 '15 at 10:51
8
It's quite extraordinary that the best answer to the simple question "how to install Python" would carry such terrible warning, it's like "this is the best way we know to install Python and it might very well break your system"... It's also very surprising that the official Python website has loads of downloads and not a single page of install instructions.
– patb
May 30 '17 at 12:03
4
pat -- the best answer to the simple question "how to install python" issudo 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/…
– michael
Oct 29 '17 at 5:22
|
show 5 more comments
up vote
187
down vote
accepted
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).
18
Usesudo make installand notaltinstallto set it as default python version
– Shagun Sodhani
Jul 22 '13 at 14:35
useCXX=g++ ./configureif ./configure issues a warning saying g++ was not found
– srj
Nov 7 '14 at 11:55
1
after installing as instructed above, what commands do I run in the console to check that indeed it is installed?
– J86
Jan 29 '15 at 10:51
8
It's quite extraordinary that the best answer to the simple question "how to install Python" would carry such terrible warning, it's like "this is the best way we know to install Python and it might very well break your system"... It's also very surprising that the official Python website has loads of downloads and not a single page of install instructions.
– patb
May 30 '17 at 12:03
4
pat -- the best answer to the simple question "how to install python" issudo 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/…
– michael
Oct 29 '17 at 5:22
|
show 5 more comments
up vote
187
down vote
accepted
up vote
187
down vote
accepted
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).
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).
edited Jun 5 '17 at 4:35
answered Feb 5 '12 at 12:20
Achu
15.7k136298
15.7k136298
18
Usesudo make installand notaltinstallto set it as default python version
– Shagun Sodhani
Jul 22 '13 at 14:35
useCXX=g++ ./configureif ./configure issues a warning saying g++ was not found
– srj
Nov 7 '14 at 11:55
1
after installing as instructed above, what commands do I run in the console to check that indeed it is installed?
– J86
Jan 29 '15 at 10:51
8
It's quite extraordinary that the best answer to the simple question "how to install Python" would carry such terrible warning, it's like "this is the best way we know to install Python and it might very well break your system"... It's also very surprising that the official Python website has loads of downloads and not a single page of install instructions.
– patb
May 30 '17 at 12:03
4
pat -- the best answer to the simple question "how to install python" issudo 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/…
– michael
Oct 29 '17 at 5:22
|
show 5 more comments
18
Usesudo make installand notaltinstallto set it as default python version
– Shagun Sodhani
Jul 22 '13 at 14:35
useCXX=g++ ./configureif ./configure issues a warning saying g++ was not found
– srj
Nov 7 '14 at 11:55
1
after installing as instructed above, what commands do I run in the console to check that indeed it is installed?
– J86
Jan 29 '15 at 10:51
8
It's quite extraordinary that the best answer to the simple question "how to install Python" would carry such terrible warning, it's like "this is the best way we know to install Python and it might very well break your system"... It's also very surprising that the official Python website has loads of downloads and not a single page of install instructions.
– patb
May 30 '17 at 12:03
4
pat -- the best answer to the simple question "how to install python" issudo 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/…
– michael
Oct 29 '17 at 5:22
18
18
Use
sudo make install and not altinstall to set it as default python version– Shagun Sodhani
Jul 22 '13 at 14:35
Use
sudo make install and not altinstall to set it as default python version– Shagun Sodhani
Jul 22 '13 at 14:35
use
CXX=g++ ./configure if ./configure issues a warning saying g++ was not found– srj
Nov 7 '14 at 11:55
use
CXX=g++ ./configure if ./configure issues a warning saying g++ was not found– srj
Nov 7 '14 at 11:55
1
1
after installing as instructed above, what commands do I run in the console to check that indeed it is installed?
– J86
Jan 29 '15 at 10:51
after installing as instructed above, what commands do I run in the console to check that indeed it is installed?
– J86
Jan 29 '15 at 10:51
8
8
It's quite extraordinary that the best answer to the simple question "how to install Python" would carry such terrible warning, it's like "this is the best way we know to install Python and it might very well break your system"... It's also very surprising that the official Python website has loads of downloads and not a single page of install instructions.
– patb
May 30 '17 at 12:03
It's quite extraordinary that the best answer to the simple question "how to install Python" would carry such terrible warning, it's like "this is the best way we know to install Python and it might very well break your system"... It's also very surprising that the official Python website has loads of downloads and not a single page of install instructions.
– patb
May 30 '17 at 12:03
4
4
pat -- the best answer to the simple question "how to install python" is
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/…– michael
Oct 29 '17 at 5:22
pat -- the best answer to the simple question "how to install python" is
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/…– michael
Oct 29 '17 at 5:22
|
show 5 more comments
up vote
168
down vote
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.
13
Program note: If you're on 10.04, you may need to install python-software-properties prior to using add-apt-repository.
– Craig Maloney
Apr 9 '12 at 19:59
3
It's recommended to build python in your local environment, instead of installing it from pre-build binaries
– pylover
Oct 22 '13 at 1:10
13
+1 :)really have a burning desire to compile it yourself
– Watt
Nov 13 '13 at 22:35
5
Missed to mention that: 1. theppais not officially endorsed, so the most secure way is to build from source. 2. this will result in a global python, that non-sudoers cannot modify or install packages to, not a local one. 3. Multiple pythons can be installed locally at different locations by building from source.
– Ioannis Filippidis
Aug 9 '14 at 1:06
2
apt-get install python2.7This install the binary python2.7 instead of python...ugly!!
– Dhawal
Dec 24 '15 at 19:35
|
show 8 more comments
up vote
168
down vote
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.
13
Program note: If you're on 10.04, you may need to install python-software-properties prior to using add-apt-repository.
– Craig Maloney
Apr 9 '12 at 19:59
3
It's recommended to build python in your local environment, instead of installing it from pre-build binaries
– pylover
Oct 22 '13 at 1:10
13
+1 :)really have a burning desire to compile it yourself
– Watt
Nov 13 '13 at 22:35
5
Missed to mention that: 1. theppais not officially endorsed, so the most secure way is to build from source. 2. this will result in a global python, that non-sudoers cannot modify or install packages to, not a local one. 3. Multiple pythons can be installed locally at different locations by building from source.
– Ioannis Filippidis
Aug 9 '14 at 1:06
2
apt-get install python2.7This install the binary python2.7 instead of python...ugly!!
– Dhawal
Dec 24 '15 at 19:35
|
show 8 more comments
up vote
168
down vote
up vote
168
down vote
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.
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.
edited Feb 4 at 13:48
Amit Kotlovski
1032
1032
answered Feb 5 '12 at 14:40
brousch
2,42011010
2,42011010
13
Program note: If you're on 10.04, you may need to install python-software-properties prior to using add-apt-repository.
– Craig Maloney
Apr 9 '12 at 19:59
3
It's recommended to build python in your local environment, instead of installing it from pre-build binaries
– pylover
Oct 22 '13 at 1:10
13
+1 :)really have a burning desire to compile it yourself
– Watt
Nov 13 '13 at 22:35
5
Missed to mention that: 1. theppais not officially endorsed, so the most secure way is to build from source. 2. this will result in a global python, that non-sudoers cannot modify or install packages to, not a local one. 3. Multiple pythons can be installed locally at different locations by building from source.
– Ioannis Filippidis
Aug 9 '14 at 1:06
2
apt-get install python2.7This install the binary python2.7 instead of python...ugly!!
– Dhawal
Dec 24 '15 at 19:35
|
show 8 more comments
13
Program note: If you're on 10.04, you may need to install python-software-properties prior to using add-apt-repository.
– Craig Maloney
Apr 9 '12 at 19:59
3
It's recommended to build python in your local environment, instead of installing it from pre-build binaries
– pylover
Oct 22 '13 at 1:10
13
+1 :)really have a burning desire to compile it yourself
– Watt
Nov 13 '13 at 22:35
5
Missed to mention that: 1. theppais not officially endorsed, so the most secure way is to build from source. 2. this will result in a global python, that non-sudoers cannot modify or install packages to, not a local one. 3. Multiple pythons can be installed locally at different locations by building from source.
– Ioannis Filippidis
Aug 9 '14 at 1:06
2
apt-get install python2.7This install the binary python2.7 instead of python...ugly!!
– Dhawal
Dec 24 '15 at 19:35
13
13
Program note: If you're on 10.04, you may need to install python-software-properties prior to using add-apt-repository.
– Craig Maloney
Apr 9 '12 at 19:59
Program note: If you're on 10.04, you may need to install python-software-properties prior to using add-apt-repository.
– Craig Maloney
Apr 9 '12 at 19:59
3
3
It's recommended to build python in your local environment, instead of installing it from pre-build binaries
– pylover
Oct 22 '13 at 1:10
It's recommended to build python in your local environment, instead of installing it from pre-build binaries
– pylover
Oct 22 '13 at 1:10
13
13
+1 :)
really have a burning desire to compile it yourself– Watt
Nov 13 '13 at 22:35
+1 :)
really have a burning desire to compile it yourself– Watt
Nov 13 '13 at 22:35
5
5
Missed to mention that: 1. the
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-sudoers cannot modify or install packages to, not a local one. 3. Multiple pythons can be installed locally at different locations by building from source.– Ioannis Filippidis
Aug 9 '14 at 1:06
Missed to mention that: 1. the
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-sudoers cannot modify or install packages to, not a local one. 3. Multiple pythons can be installed locally at different locations by building from source.– Ioannis Filippidis
Aug 9 '14 at 1:06
2
2
apt-get install python2.7This install the binary python2.7 instead of python...ugly!!– Dhawal
Dec 24 '15 at 19:35
apt-get install python2.7This install the binary python2.7 instead of python...ugly!!– Dhawal
Dec 24 '15 at 19:35
|
show 8 more comments
up vote
24
down vote
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.)
2
Following this instructions on Ubuntu 16.04.1 LTS successfully setup python 2.7 and pip like this: sudo apt-get install python2.7; sudo apt-get install python-pip; sudo -H python2 -m pip install --upgrade pip; # Checking version: $ pip --version -> pip 9.0.1 from /usr/local/lib/python2.7/dist-packages (python 2.7); $ python --version -> Python 2.7.12
– Robert Lujo
Mar 3 '17 at 10:55
Really helpful answer - thanks a lot!
– Failed Scientist
Oct 7 '17 at 13:30
Pardon my ignorance but may I know what does "hashed" mean when showing Python versions?
– Failed Scientist
Oct 7 '17 at 13:33
1
@TalhaIrfan It's a good question (and, if you'll allow a simplified answer): when a command is typed in bash (as w/ most shells), the cmd could be an alias, function, or executable file found in the$PATH. The env varPATHis 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/…
– michael
Oct 8 '17 at 7:54
1
@gaia you may want to ask a separate question, since more back & forth may be required to figure it out (or if anything has changed since I wrote this up). Perhaps, first verify that bothpip(2.7) &pip3(3.x) were completely installed/upgraded, and not just the former -- i.e.,sudo apt-get install python-pip python3-pipandsudo -H python2 -m pip install --upgrade pipandsudo -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.
– michael
Jul 30 at 8:24
|
show 3 more comments
up vote
24
down vote
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.)
2
Following this instructions on Ubuntu 16.04.1 LTS successfully setup python 2.7 and pip like this: sudo apt-get install python2.7; sudo apt-get install python-pip; sudo -H python2 -m pip install --upgrade pip; # Checking version: $ pip --version -> pip 9.0.1 from /usr/local/lib/python2.7/dist-packages (python 2.7); $ python --version -> Python 2.7.12
– Robert Lujo
Mar 3 '17 at 10:55
Really helpful answer - thanks a lot!
– Failed Scientist
Oct 7 '17 at 13:30
Pardon my ignorance but may I know what does "hashed" mean when showing Python versions?
– Failed Scientist
Oct 7 '17 at 13:33
1
@TalhaIrfan It's a good question (and, if you'll allow a simplified answer): when a command is typed in bash (as w/ most shells), the cmd could be an alias, function, or executable file found in the$PATH. The env varPATHis 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/…
– michael
Oct 8 '17 at 7:54
1
@gaia you may want to ask a separate question, since more back & forth may be required to figure it out (or if anything has changed since I wrote this up). Perhaps, first verify that bothpip(2.7) &pip3(3.x) were completely installed/upgraded, and not just the former -- i.e.,sudo apt-get install python-pip python3-pipandsudo -H python2 -m pip install --upgrade pipandsudo -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.
– michael
Jul 30 at 8:24
|
show 3 more comments
up vote
24
down vote
up vote
24
down vote
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.)
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.)
answered Sep 29 '16 at 8:50
michael
1,44211421
1,44211421
2
Following this instructions on Ubuntu 16.04.1 LTS successfully setup python 2.7 and pip like this: sudo apt-get install python2.7; sudo apt-get install python-pip; sudo -H python2 -m pip install --upgrade pip; # Checking version: $ pip --version -> pip 9.0.1 from /usr/local/lib/python2.7/dist-packages (python 2.7); $ python --version -> Python 2.7.12
– Robert Lujo
Mar 3 '17 at 10:55
Really helpful answer - thanks a lot!
– Failed Scientist
Oct 7 '17 at 13:30
Pardon my ignorance but may I know what does "hashed" mean when showing Python versions?
– Failed Scientist
Oct 7 '17 at 13:33
1
@TalhaIrfan It's a good question (and, if you'll allow a simplified answer): when a command is typed in bash (as w/ most shells), the cmd could be an alias, function, or executable file found in the$PATH. The env varPATHis 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/…
– michael
Oct 8 '17 at 7:54
1
@gaia you may want to ask a separate question, since more back & forth may be required to figure it out (or if anything has changed since I wrote this up). Perhaps, first verify that bothpip(2.7) &pip3(3.x) were completely installed/upgraded, and not just the former -- i.e.,sudo apt-get install python-pip python3-pipandsudo -H python2 -m pip install --upgrade pipandsudo -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.
– michael
Jul 30 at 8:24
|
show 3 more comments
2
Following this instructions on Ubuntu 16.04.1 LTS successfully setup python 2.7 and pip like this: sudo apt-get install python2.7; sudo apt-get install python-pip; sudo -H python2 -m pip install --upgrade pip; # Checking version: $ pip --version -> pip 9.0.1 from /usr/local/lib/python2.7/dist-packages (python 2.7); $ python --version -> Python 2.7.12
– Robert Lujo
Mar 3 '17 at 10:55
Really helpful answer - thanks a lot!
– Failed Scientist
Oct 7 '17 at 13:30
Pardon my ignorance but may I know what does "hashed" mean when showing Python versions?
– Failed Scientist
Oct 7 '17 at 13:33
1
@TalhaIrfan It's a good question (and, if you'll allow a simplified answer): when a command is typed in bash (as w/ most shells), the cmd could be an alias, function, or executable file found in the$PATH. The env varPATHis 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/…
– michael
Oct 8 '17 at 7:54
1
@gaia you may want to ask a separate question, since more back & forth may be required to figure it out (or if anything has changed since I wrote this up). Perhaps, first verify that bothpip(2.7) &pip3(3.x) were completely installed/upgraded, and not just the former -- i.e.,sudo apt-get install python-pip python3-pipandsudo -H python2 -m pip install --upgrade pipandsudo -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.
– michael
Jul 30 at 8:24
2
2
Following this instructions on Ubuntu 16.04.1 LTS successfully setup python 2.7 and pip like this: sudo apt-get install python2.7; sudo apt-get install python-pip; sudo -H python2 -m pip install --upgrade pip; # Checking version: $ pip --version -> pip 9.0.1 from /usr/local/lib/python2.7/dist-packages (python 2.7); $ python --version -> Python 2.7.12
– Robert Lujo
Mar 3 '17 at 10:55
Following this instructions on Ubuntu 16.04.1 LTS successfully setup python 2.7 and pip like this: sudo apt-get install python2.7; sudo apt-get install python-pip; sudo -H python2 -m pip install --upgrade pip; # Checking version: $ pip --version -> pip 9.0.1 from /usr/local/lib/python2.7/dist-packages (python 2.7); $ python --version -> Python 2.7.12
– Robert Lujo
Mar 3 '17 at 10:55
Really helpful answer - thanks a lot!
– Failed Scientist
Oct 7 '17 at 13:30
Really helpful answer - thanks a lot!
– Failed Scientist
Oct 7 '17 at 13:30
Pardon my ignorance but may I know what does "hashed" mean when showing Python versions?
– Failed Scientist
Oct 7 '17 at 13:33
Pardon my ignorance but may I know what does "hashed" mean when showing Python versions?
– Failed Scientist
Oct 7 '17 at 13:33
1
1
@TalhaIrfan It's a good question (and, if you'll allow a simplified answer): when a command is typed in bash (as w/ most shells), the cmd could be an alias, function, or executable file found in the
$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/…– michael
Oct 8 '17 at 7:54
@TalhaIrfan It's a good question (and, if you'll allow a simplified answer): when a command is typed in bash (as w/ most shells), the cmd could be an alias, function, or executable file found in the
$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/…– michael
Oct 8 '17 at 7:54
1
1
@gaia you may want to ask a separate question, since more back & forth may be required to figure it out (or if anything has changed since I wrote this up). Perhaps, first verify that both
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.– michael
Jul 30 at 8:24
@gaia you may want to ask a separate question, since more back & forth may be required to figure it out (or if anything has changed since I wrote this up). Perhaps, first verify that both
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.– michael
Jul 30 at 8:24
|
show 3 more comments
up vote
11
down vote
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
add a comment |
up vote
11
down vote
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
add a comment |
up vote
11
down vote
up vote
11
down vote
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
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
edited Apr 13 '17 at 12:24
Community♦
1
1
answered Jul 26 '12 at 14:37
ThatGuy
11112
11112
add a comment |
add a comment |
up vote
4
down vote
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
This is the cleanest way to get a really up to date version of Python on an older version of Ubuntu. It includes virtualenv support as well, via thepyenv-virtualenvplugin, making it easy to install applications with different module requirements without clashes.
– RichVel
May 6 '17 at 15:35
Two warnings about pyenv: (1) it only works from a bash shell (or maybe zsh, but certainly not dash which is /bin/sh on Ubuntu), and (2) it requires a login shell (e.g.bash --login), which is not always easy to achieve e.g. from Ansible. Best for interactive use, less good for scripting servers.
– RichVel
May 8 '17 at 7:10
add a comment |
up vote
4
down vote
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
This is the cleanest way to get a really up to date version of Python on an older version of Ubuntu. It includes virtualenv support as well, via thepyenv-virtualenvplugin, making it easy to install applications with different module requirements without clashes.
– RichVel
May 6 '17 at 15:35
Two warnings about pyenv: (1) it only works from a bash shell (or maybe zsh, but certainly not dash which is /bin/sh on Ubuntu), and (2) it requires a login shell (e.g.bash --login), which is not always easy to achieve e.g. from Ansible. Best for interactive use, less good for scripting servers.
– RichVel
May 8 '17 at 7:10
add a comment |
up vote
4
down vote
up vote
4
down vote
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
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
answered Mar 30 '17 at 7:38
Whispered
15817
15817
This is the cleanest way to get a really up to date version of Python on an older version of Ubuntu. It includes virtualenv support as well, via thepyenv-virtualenvplugin, making it easy to install applications with different module requirements without clashes.
– RichVel
May 6 '17 at 15:35
Two warnings about pyenv: (1) it only works from a bash shell (or maybe zsh, but certainly not dash which is /bin/sh on Ubuntu), and (2) it requires a login shell (e.g.bash --login), which is not always easy to achieve e.g. from Ansible. Best for interactive use, less good for scripting servers.
– RichVel
May 8 '17 at 7:10
add a comment |
This is the cleanest way to get a really up to date version of Python on an older version of Ubuntu. It includes virtualenv support as well, via thepyenv-virtualenvplugin, making it easy to install applications with different module requirements without clashes.
– RichVel
May 6 '17 at 15:35
Two warnings about pyenv: (1) it only works from a bash shell (or maybe zsh, but certainly not dash which is /bin/sh on Ubuntu), and (2) it requires a login shell (e.g.bash --login), which is not always easy to achieve e.g. from Ansible. Best for interactive use, less good for scripting servers.
– RichVel
May 8 '17 at 7:10
This is the cleanest way to get a really up to date version of Python on an older version of Ubuntu. It includes virtualenv support as well, via the
pyenv-virtualenv plugin, making it easy to install applications with different module requirements without clashes.– RichVel
May 6 '17 at 15:35
This is the cleanest way to get a really up to date version of Python on an older version of Ubuntu. It includes virtualenv support as well, via the
pyenv-virtualenv plugin, making it easy to install applications with different module requirements without clashes.– RichVel
May 6 '17 at 15:35
Two warnings about pyenv: (1) it only works from a bash shell (or maybe zsh, but certainly not dash which is /bin/sh on Ubuntu), and (2) it requires a login shell (e.g.
bash --login), which is not always easy to achieve e.g. from Ansible. Best for interactive use, less good for scripting servers.– RichVel
May 8 '17 at 7:10
Two warnings about pyenv: (1) it only works from a bash shell (or maybe zsh, but certainly not dash which is /bin/sh on Ubuntu), and (2) it requires a login shell (e.g.
bash --login), which is not always easy to achieve e.g. from Ansible. Best for interactive use, less good for scripting servers.– RichVel
May 8 '17 at 7:10
add a comment |
up vote
0
down vote
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 pyenv
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
~/.profileor~/.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!
Setting up an environment
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.
Troubleshooting
bash: pyenv: command not found,fish: Unknown command 'pyenv'
- Check your
$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.
- Check your
pyenv: no such command 'virtualenv'
- If you didn't use the installer script, you likely only installed the root pyenv package. See pyenv-virtualenv for instructions to add the plugin
- If you used the installer script, check if it shows up with
pyenv commands.
add a comment |
up vote
0
down vote
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 pyenv
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
~/.profileor~/.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!
Setting up an environment
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.
Troubleshooting
bash: pyenv: command not found,fish: Unknown command 'pyenv'
- Check your
$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.
- Check your
pyenv: no such command 'virtualenv'
- If you didn't use the installer script, you likely only installed the root pyenv package. See pyenv-virtualenv for instructions to add the plugin
- If you used the installer script, check if it shows up with
pyenv commands.
add a comment |
up vote
0
down vote
up vote
0
down vote
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 pyenv
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
~/.profileor~/.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!
Setting up an environment
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.
Troubleshooting
bash: pyenv: command not found,fish: Unknown command 'pyenv'
- Check your
$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.
- Check your
pyenv: no such command 'virtualenv'
- If you didn't use the installer script, you likely only installed the root pyenv package. See pyenv-virtualenv for instructions to add the plugin
- If you used the installer script, check if it shows up with
pyenv commands.
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 pyenv
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
~/.profileor~/.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!
Setting up an environment
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.
Troubleshooting
bash: pyenv: command not found,fish: Unknown command 'pyenv'
- Check your
$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.
- Check your
pyenv: no such command 'virtualenv'
- If you didn't use the installer script, you likely only installed the root pyenv package. See pyenv-virtualenv for instructions to add the plugin
- If you used the installer script, check if it shows up with
pyenv commands.
edited Nov 28 at 16:17
answered Oct 15 at 20:05
Nick T
1,58221127
1,58221127
add a comment |
add a comment |
protected by Community♦ Jan 31 '15 at 0:21
Thank you for your interest in this question.
Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).
Would you like to answer one of these unanswered questions instead?
1
At one time, I imagine this was asked in order to install a newer version of python on Ubuntu. Now, it's required to install an older version of python on Ubuntu (because we still require python 2.7 for a lot of things)... tl;dr: this answer is no longer current/correct. Instead, assuming python3 is installed by default (and perhaps a minimal python2.x), then run:
sudo apt-get install python-2.7 python-pip– michael
Sep 20 '16 at 13:00
@michael_n what are you talking about? compiling from source does not make this answer incorrect or outdated. its just a different method. you can use apt to automate the process for you if needed.
– user383919
Sep 29 '16 at 1:23
u use what u need. I dont really see how this supports your claim of this being outdated. like you said yourself, u use it when you need to because it may not be available. For instance, windows subsystem for linux uses some dated software packages even tho the distro is ubuntu 16.04.1 (beta) and uses python2.6.2, and python3 even tho the current is python2.7.12. In thay case, I should compil if I want up-to-date packages
– user383919
Sep 29 '16 at 3:34
1
@jargonjunkie you're off-topic, but correct. If the question is "how do I install python 2.7 on ubuntu 16.04+" which it is (since 16.04 is now available, which is my point), then you simply
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.– michael
Sep 29 '16 at 6:07
hope this helps illustrate (added answer). the python ecosystem is very particular/finicky, and you can easily get into "dependency hell" if you don't carefully construct your python environment askubuntu.com/a/831075/17060
– michael
Sep 29 '16 at 8:54