451

I've tried the normal way, sudo apt-get install python3.6, but... well... that didn't work.

So, how would I go about it? (I'd preferably not build it on my own)

I'm using Ubuntu 16.04.

muru
  • 197,895
  • 55
  • 485
  • 740
Olian04
  • 4,653
  • 5
    Maybe python 3.6 is not available for your distribution. If you have installed aptitude, run aptitude search python3 – ridgy Dec 28 '16 at 20:13

9 Answers9

633

Ubuntu 14.04 (Trusty) and 16.04 (Xenial)

Deadsnakes removed support for 16.04. You can use this unofficial repo for now. https://github.com/deadsnakes/issues/issues/195

sudo add-apt-repository -y ppa:jblgf0/python
sudo apt-get update
sudo apt-get install python3.6

J. Fernyhough's PPA used to be an alternative option, but he has shut it down to protest against (ab)use.

You can install pip like this:

curl https://bootstrap.pypa.io/pip/3.6/get-pip.py | sudo python3.6

Ubuntu 16.10 and 17.04

If you are using Ubuntu 16.10 or 17.04, then Python 3.6 is in the universe repository, so you can just run:

sudo apt-get update
sudo apt-get install python3.6

After installation for Ubuntu 14.04, 16.04, 16.10 and 17.04

To invoke the Python 3.6 interpreter, run python3.6.

Ubuntu 17.10, 18.04 (Bionic) and onwards

Ubuntu 17.10 and 18.04 already come with Python 3.6 as default. Just run python3 to invoke it.

joe
  • 129
edwinksl
  • 23,789
  • 2
    @Olian04 No problem! As a general tip, J Fernyhough has a lot of useful PPAs at https://launchpad.net/~jonathonf. If you need a PPA, be sure to check there. – edwinksl Dec 28 '16 at 20:40
  • 6
    Note that python3.6 in Ubuntu 16.10 is a beta version that has some problems (like a very painful memory leak in dict that shows up in some rare circumstances). – Marius Gedminas Dec 29 '16 at 14:40
  • 1
    pyenv downloads releases directly from Python.org and is generally updated for new versions (pre-releases or finals) within 24 hours of them being available! You can also direct pyenv to install dev branches, wherein it will clone the appropriate CPython repository branch and build it for you. – Nick T Dec 29 '16 at 15:08
  • @MariusGedminas In both cases, you can email whoever is maintaining the repo or file a bug report and hope they upgrade their Pythons. – edwinksl Dec 29 '16 at 18:36
  • 1
    ppa:jonathonf/python-3.6 currently has the final release, so yay! – Marius Gedminas Jan 10 '17 at 08:30
  • 2
    It seems that the ppa:jonathonf version of python 3.6 doesn't include pip or even ensurepip so it's very difficult to install packages. How should I resolve this? – Migwell Feb 10 '17 at 06:14
  • @Miguel - Install pip manually? Just grab get-pip.py and run it? – Fake Name Apr 09 '17 at 02:54
  • 135
    *CAUTION* - Do not under any circumstances be tempted to run sudo apt remove python3.5 or anything like it; Python is more fundamentally baked into Ubuntu than you would think, and you could break your Ubuntu install. If you want python3 to map to python3.6, create a symlink instead! – Huw Walters Apr 28 '17 at 09:09
  • While Ubuntu 16.10 has the 3.6.0~b2-1, 17.04 comes with 3.6.1-1 version. There doesn't seem to be an easy way to get python 3.6.1 on 16.10 so upgrading seems in order. – Maxime R. May 03 '17 at 20:52
  • @MaximeR. 16.10 also has gone EOL, so people should upgrade to 17.04 anyway. – edwinksl May 03 '17 at 23:28
  • 31
    I see there is no python3.6-pip package, and so I used curl https://bootstrap.pypa.io/get-pip.py | sudo python3.6 to install pip. – Asclepius Jun 20 '17 at 20:26
  • How do I run the tests in libpython3.6-testsuite? – Asclepius Jun 20 '17 at 20:27
  • Looks like the new recommendation for deadsnakes is to use ppa:deadsnakes/ppa instead of fkrull. – Jason R. Coombs Sep 10 '17 at 01:32
  • So this installs python 3.6 side-by-side with Python 3.5 on 16.04? Or does it clobber things? – Thomas Ward Nov 06 '17 at 15:55
  • @ThomasWard Side-by-side. I should include that information in the answer. – edwinksl Nov 06 '17 at 18:21
  • 5
    Somehow python from ppa:jonathonf/python-3.6 arrived with broken pip and no easy_install on 14.04. However, I've managed to fix it by installing easy_install and then reinstalling pip via curl https://bootstrap.pypa.io/ez_setup.py -o - | python3.6 && python3.6 -m easy_install pip Just in case someone runs into the same problem... – FirefoxMetzger Dec 03 '17 at 17:36
  • Under 16.04, removing python3 package did broke Unity. Reinstalling python3 package + unity fixed the issue. – Stphane Jan 08 '18 at 18:43
  • @Stphane Yeah but why did you even remove the python3 package in the first place? It is essential for proper OS operation. – edwinksl Jan 08 '18 at 19:11
  • @edwinksl Yes I guess so. The thing is, I saw python 2.7 was installed so I believed it was the version main distrib packages would depend on (This is rookie assumption I know but it was late night, it felt a bit like it was the red button I should not push on), most importantly the computer I did tests on was about to be reinstalled anyway. – Stphane Jan 09 '18 at 07:44
  • 1
    You may also need sudo apt-get install python3.6-dev – nu everest Feb 13 '18 at 19:14
  • 6
    Like some other commenters above, I also had trouble getting pip to install with ppa:jonathonf/python-3.6. On the other hand, ppa:deadsnakes/ppa worked flawlessly (apt-get install python3.6 python3.6-venv -y). – Michael Herrmann Feb 26 '18 at 16:00
  • @MichaelHerrmann Okay I will flip the order of these two PPAs so that people will try the deadsnakes PPA first. – edwinksl Feb 26 '18 at 17:44
  • @edwinksl yeah that's great thanks. The deadsnakes one also has a more recent Python version (3.6.4 instead of 3.6.3). – Michael Herrmann Feb 27 '18 at 08:06
  • 2
    So which repo is better, Ferny or Felix? – wordsforthewise Mar 07 '18 at 21:20
  • I got E: Package 'python3.6' has no installation candidate – k5f May 06 '18 at 17:33
  • @k5f Did you run sudo apt update? – edwinksl May 06 '18 at 19:00
  • @edwinksl I did but to no awail. I installed using pyenv instead and everything's fine. Thanks for asking. – k5f May 07 '18 at 16:28
  • 1
    @wordsforthewise Several people (myself included) seem to be having problems with the jonathonf repo currently, so the deadsnakes repo seems to be the stable choice at the moment. See also https://askubuntu.com/a/1034266/320633 – Jonas Dahlbæk May 15 '18 at 14:08
  • How do you get python3.6 to find the installed packages? When I try "import pandas" it gives me "ModuleNotFoundError: No module named 'pandas'" even though it imports fine from python 3.5. – Simd Jun 13 '18 at 10:02
  • 1
    on AWS, ususing community ubuntu 16.04.
    sudo add-apt-repository ppa:deadsnakes/ppa [did not work]
    sudo add-apt-repository ppa:jonathonf/python-3.6 [did work]
    – CodingMatters Aug 04 '18 at 08:05
  • 2
    @Huw If you mean changing the symlink at /usr/bin/python3, that's also a bad idea. An alias would be better, IMO. See Gnome terminal will not start for an example of the consequences. – wjandrea Aug 05 '18 at 01:25
  • 1
    Ubuntu 18.04: I used the deadsnakes PPA as described above with no issues. – Jonathan Sep 02 '18 at 02:35
  • 1
    deadsnakes worked fine for 3.7. – Asclepius Sep 23 '18 at 17:49
  • pip3 is not broken after installing deadsnakes package and I don't know how to update it – lurscher Nov 26 '18 at 02:12
  • An easy way to install pip on ubuntu 18.04: sudo apt install python3-pip – Quitiweb Sep 12 '19 at 09:41
  • 1
    Could you remove https://launchpad.net/~jonathonf repo? He went into protest and disabled the repo for everyone to use. Deadsnake has access to Python3.6 – Ahmed Dec 11 '19 at 19:14
  • Step-by-step guide for both manual install and install via PPA. – Petr Vepřek Feb 24 '20 at 15:08
  • 1
    As of 2021, deadsnakes don't provide python3.6 as "upstream ubuntu provides those packages." https://launchpad.net/~deadsnakes/+archive/ubuntu/ppa – ejke Nov 19 '21 at 07:20
160

I would recommend pyenv to solve your woes. It doesn't use Aptitude, and does involve "building it yourself", but it's fully automated. 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.

Plus, the answer to the follow-up question "How do I install Python 3.7 using apt-get?" has the same answer: pyenv update; pyenv install 3.7.0. It will generally work same day of a release because you don't need to wait for someone else to package it for Ubuntu. See all the versions you can install with pyenv install --list

Install pyenv

  1. 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    
    
  2. 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
    
  3. Add init lines to your ~/.profile or ~/.bashrc (it mentions it at the end of the install script):

    export PATH="$HOME/.pyenv/bin:$PATH"
    eval "$(pyenv init -)"
    eval "$(pyenv virtualenv-init -)"
    
  4. 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!

  1. Install your preferred Python version (this will download the source and build it for your user, no input required)

    pyenv install 3.6.0
    
  2. Make it a virtualenv so you can make others later if you want

    pyenv virtualenv 3.6.0 general
    
  3. Make it globally active (for your user)

    pyenv global general
    
  4. 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'

    1. 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.
  • pyenv: no such command 'virtualenv'

    1. 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
    2. If you used the installer script, check if it shows up with pyenv commands.
Nick T
  • 2,483
  • 1
    There's one caveat, when using pyenv with Python 2.x (or very old 3.x releases before the new Unicode string internal representation happened): pyenv uses the default upstream compilation flags and builds with 16-bit Unicode strings. Linux distros generally build with 32-bit Unicode strings. This causes pain when you pip install some stuff into both pyenv and non-pyenv Pythons, because the of pip wheel caching. – Marius Gedminas Jan 10 '17 at 08:34
  • @marius why would you ever use a non-pyenv version after installing it? – Nick T Jan 10 '17 at 14:34
  • 3
    I don't know, but I discovered this issue by helping someone on IRC debug a problem where a particular Python package (lxml?) failed to work due to this. So it happens in practice, to some people, and is worth knowing. (The workaround is rm -r ~/.cache/pip/wheels/.) – Marius Gedminas Jan 11 '17 at 06:30
  • Before installing python, it may be necessary to install the package tk-dev. In this way, pyenv will install python with the tkinter module. This may be useful in case the python3-tk module is not updated on the repository (in my case it was only for python 3.5). – gc5 Jan 18 '17 at 11:00
  • @MariusGedminas yeah, there's some bug with the lxml package and/or distutils and/or pip where it caches the build for the system Python, which has different Unicode types, then attempts to reuse it for stock CPython builds which don't have the downstream Ubuntu patches applied that tweak those settings. Makes me sad, straws like that stuff the "Python 3 sucks" strawman :( – Nick T Jan 27 '17 at 17:54
  • 1
    Does pyenv need to be installed for every user which need Python? And if I have 3 users who need same Python 3.6 version, then it'll have to compile it 3 times and it will take 3x disk space? If that's true then it sucks… :/ – Display Name Jun 25 '17 at 11:54
  • 1
    @SargeBorsch by default (if you use pyenv-installer) it's a user install, but there's nothing preventing you from installing it to /opt or whatever and adding some symlinks to /bin. I find it being user-only to be extremely useful; users don't need sudo (other than libs). Disk space is cheap. – Nick T Jun 25 '17 at 15:30
  • "Disk space is cheap" — not necessarily on a VPS ;D

    – Display Name Jun 25 '17 at 15:48
  • I'm doing this with Ubuntu on Windows. I wanted to run a python program but the author hardcoded linux paths. -_- – beppe9000 Dec 12 '17 at 11:53
  • Git also needs to be installed, else you get a pyenv: Git is not installed, can't continue. error when running the installer script – virtualxtc May 23 '18 at 18:27
  • @beppe9000 I've used pyenv in the Windows Subsystem for Linux (bash on Windows, bash.exe, etc) without problem; what commands are you running? – Nick T Sep 18 '18 at 22:54
  • @NickT I solved that long time ago. My problem was the script author hardcoded some paths in their application assuming it would be run on linuxes. The solution was to use the WSL since i did not want to modify the script. – beppe9000 Sep 19 '18 at 21:01
  • @beppe9000 ah, thought you meant pyenv had them hardcoded. Pyenv I think is shell-only, so you'd need to be in WSL or maybe Cygwin(?) at least. If they're using shabangs, you could advise them to alter #!/usr/bin/python scripts to #!/usr/bin/env python. – Nick T Sep 19 '18 at 21:29
  • Tried to install 3.7.0 this way in 14.04 and for some reason hit an openssl issue, even though openssl and the library is installe.d – monkut Oct 22 '18 at 00:40
  • @monkut might be a version issue? Did you figure it out? Otherwise I could try. Does 14.04 get any updates anymore though? – Nick T Oct 22 '18 at 12:55
  • Yea, I suppose it could be. I didn't manage to work around this yet. It's a pretty out there edge case, I'm trying to get python 3.7 running in the circleci machine executor, which appears to run ubuntu 14.04 for some reason. – monkut Oct 22 '18 at 14:54
21

It depends on which version of Ubuntu you are using.

Ubuntu 16.10 and Ubuntu 17.04

Since Python 3.6 is installed in the universe repository of Ubuntu 16.10 and Ubuntu 17.04, you can directly install python 3.6 from the repository. Just use the commands below:

sudo apt update
sudo apt install python3.6

Ubuntu 16.04

There are two ways to install Python3.6 on Ubuntu 16.04

  • Compile and install python 3.6 on Ubuntu 16.04
  • Install python 3.6 on Ubuntu 16.04 from PPA

1. Compile and install python 3.6 on Ubuntu 16.04

Install the necessary dependencies, download the python 3.6 source code, and build the environment and install

sudo apt install build-essential checkinstall
sudo apt install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev
wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tar.xz
tar xvf Python-3.6.0.tar.xz
cd Python-3.6.0/
./configure
sudo make altinstall

2. Install python 3.6 on Ubuntu 16.04 from PPA

You can install Python 3.6  from PPA using the commands below

sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.6

If Python 3.6 is correctly installed, you can invoke the python interpreter by running python3.6 in the terminal.

I hope this helps. If you are having any issues, you can check this blog post here.

  • 4
    This is essentially a copy of the accepted answer. Where is the added valuee of your answer? – Marc Vanhoomissen Jan 04 '18 at 19:28
  • 2
    The first step in the Ubuntu 16.04 is for those who want to compile and install python 3.6 for some reason. The process of compile and install Python 3.6 on Ubuntu 16.04 isn't available in the accepted answer or any answer in the thread for that matter. The other points are to make clear the version of Ubuntu and how it differs from other accepted answers. – Aryal Bibek Jan 05 '18 at 06:01
  • 1
    PPA installs on 16.04 (Mint) appear broken. The installation from source info is useful. – demented hedgehog May 07 '18 at 22:46
  • option 2 sudo add-apt-repository ppa:deadsnakes/ppa && sudo apt install python3.6 worked for me on Ubuntu 20.04 –  Apr 24 '20 at 22:38
  • Thanks for python3.6 instructions, kudos to you! – Vijay Kumar Kanta Mar 27 '22 at 14:41
15

An alternative route if you can't find any working repos would be you could try compiling yourself from source. You can find the source code on the download page. Then download and untar the tarball; for example for Python-3.6.1.tgz.

The process for untarring the tgz file is:

tar -xvzf /path/to/yourfile.tgz

Once you are in the file path the file was unzipped to, run:

./configure
make
make altinstall

And hopefully this should solve the problem for you.

David Foerster
  • 36,264
  • 56
  • 94
  • 147
  • 4
    Question says (id preferably not build it on my own). Maybe it'd be better to go the apt route if possible. – TheWanderer Dec 28 '16 at 20:11
  • Ok, I'll have a look see if I can find any alternative repositories for you. Did you get a chance to look on Google for alternative repos yourself yet? I don't want to suggest things you've already tried. – Just In Time Berlake Dec 28 '16 at 20:13
  • I'm not the OP. Just making a suggestion. I couldn't find any PPAs for 3.6, so building might be the necessary route. You should probably address that in your answer though. – TheWanderer Dec 28 '16 at 20:14
  • 1
    Your make commands will fail on a system that the user has never built anything, as there are many packages required.
    "sudo apt install build-essential libssl-dev zlib1g-dev libncurses5-dev libncursesw5-dev libreadline-dev libsqlite3-dev libgdbm-dev libdb5.3-dev libbz2-dev libexpat1-dev liblzma-dev tk-dev"
    
    – Joe Apr 27 '18 at 15:43
  • Agreed with @Joe. Please also install the packages mentioned here (https://stackoverflow.com/a/49696062/6907424) before installing Python itself, otherwise using this Python you won't be able to use pip and possibly other issues will also occur. For me, installing packages in the aforementioned link was enough. But I needed to upgrade pip later for my use case. – hafiz031 Sep 02 '21 at 10:43
  • @hafiy You can also just used the packages mentioned above here – Cadoiz Sep 20 '21 at 10:09
5

Your best bet is to upgrade to Ubuntu 20.04 and then install it from the deadsnakes PPA:

sudo add-apt-repository ppa:deadsnakes/ppa 
sudo apt install python3.6

Otherwise, you can try to figure out how to install the deadsnakes PPA on a version of Ubuntu that they don't support. They only support Long Term Support (LTS) versions of Ubuntu, which 19.04 and 19.10 are not (but Ubuntu 20.04 is). I could've sworn I saw a thread about people doing it somewhere on Github https://github.com/deadsnakes/issues/issues?q=is%3Aissue+is%3Aclosed but I can't find it now.

Also check out this answer about downloading a deb-package https://stackoverflow.com/a/55858634/3064538

But if you can't do any of those, then your last resort is compiling it from source, which you do by first installing a C compiler

sudo apt install gcc

then going to https://www.python.org/downloads/ and finding the latest micro version of 3.6 (3.6.10 as I'm writing this) and compiling it from source, like this

wget -P ~/Downloads https://www.python.org/ftp/python/3.6.10/Python-3.6.10.tar.xz
cd ~/Downloads
tar -xJf Python-3.6.10.tar.xz
cd Python-3.6.10

and then

./configure
make
make test
sudo make altinstall

The last command uses altinstall instead of install so that 3.6 is installed as python3.6 and pip3.6. If you change the last command to sudo make install (without the alt) then that will install it as python3, which will overwrite the version of Python 3.7 (and pip) you have installed now.

Updating is left as an exercise for the reader.

  • thanks for this. I guess if I already have 3.6 installed this will not work? I have 3.6.9 and when I ran pthon3.6 the version was still 3.6.9 – user3494047 Dec 08 '20 at 10:43
  • how did you install 3.6.9? I guess you have to delete whatever files which python3.6 and which pip3.6 return before running make altinstall –  Dec 08 '20 at 13:32
4

For Ubuntu 15.10 I installed it successfully using this method:

sudo add-apt-repository ppa:jonathonf/python-3.6

But I edited this file:

sudo vi /etc/apt/sources.list.d/jonathonf-ubuntu-python-3_6-wily.list

And I changed wily to trusty and then:

sudo apt-get update
sudo apt-get install python3.6
H Ketabi
  • 171
3

Perhaps suggesting Conda isn't a bad idea. I think it's at least easier than using pyenv. But maybe it does depend on what you intend to do with Python after all, because I think with Conda you may end up with some extra packages.

EDIT: It's probably worth mentioning that after you install Conda's default version of Python, you can install the version you need, here 3.6, using conda like

conda install python==3.6
arsaKasra
  • 3,126
  • 2
  • 19
  • 16
2

Consider pyenv + pipenv which is to replace using PIP + virtual environments using Pipfile

Then in Pipfile

[requires]
python_version = "3.6"

https://stackoverflow.com/a/49800061/1689770

Jonathan
  • 3,904
0

First, follow some of the other answers to install Python 3.6 or 3.7. Then, if want to install PyPi packages such as OpenEXR through pip you may get some errors. Some of them (e.g. for OpenEXR's PyPi package) might get resolved by installing Python development package for your newly-installed Python. This can be done using the followings:

sudo apt-get install python3.6-dev

or

sudo apt-get install python3.7-dev

Amir
  • 609
  • 1
  • 9
  • 21