34

I am using Ubuntu 16.04 LTS . I have python3 installed. There are two versions installed, python 3.4.3 and python 3.6 . Whenever I use python3 command, it takes python 3.4.3 by default. I want to use python 3.6 with python3.

python3 --version shows version 3.4.3

I am installing ansible which supports version > 3.5 . So, whenever, I type ansible in the terminal, it throws error because of python 3.4

  • What is the command used to execute python 3.6 ? – user264413 Dec 13 '17 at 9:22
  • command is :- python3.6 – codeclue Dec 13 '17 at 9:23
  • 1
    What does your sudo update-alternatives --config python3 say? – Mikael Kjær Dec 13 '17 at 9:35
  • update-alternatives: error: no alternatives for python3 – codeclue Dec 13 '17 at 9:38
  • See my comment in the below answer on how to use ansible with a specific version of python3. You could also consider removing python 3.4. – Mikael Kjær Dec 13 '17 at 9:43
51

From the comment:

sudo update-alternatives --config python

Will show you an error:

update-alternatives: error: no alternatives for python3 

You need to update your update-alternatives , then you will be able to set your default python version.

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.4 1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 2

Then run :

sudo update-alternatives --config python

Set python3.6 as default.

Or use the following command to set python3.6 as default:

sudo update-alternatives  --set python /usr/bin/python3.6
3

An easy answer would be to add an alias for python3.6.

Just add this line in the file ~/.bashrc : alias python3="python3.6", then close your terminal and open a new one. Now when you type python3 xxx it gets translated to python3.6 xxx.

This solution fixes your problem without needing to tweak your system too heavily.

EDIT :

As Mikael Kjær pointed out, this is a misconfiguration of ansible with your system.

As seen here :

Set the ansible_python_interpreter configuration option to /usr/bin/python3. The ansible_python_interpreter configuration option is usually set per-host as an inventory variable associated with a host or group of hosts:

  # Example inventory that makes an alias for localhost that uses python3
  [py3-hosts]
  localhost-py3 ansible_host=localhost ansible_connection=local

  [py3-hosts:vars]
  ansible_python_interpreter=/usr/bin/python3

As seen here about the config file :

Changes can be made and used in a configuration file which will be processed in the following order:

* ANSIBLE_CONFIG (an environment variable)
* ansible.cfg (in the current directory)
* .ansible.cfg (in the home directory)
* /etc/ansible/ansible.cfg
3

Create symlink for /usr/bin/python3. In my LinuxMint:

# ls -lh /usr/bin/python3 /usr/bin/python
lrwxrwxrwx 1 root root 9 ноя 24  2017 /usr/bin/python -> python2.7
lrwxrwxrwx 1 root root 9 сен  6  2017 /usr/bin/python3 -> python3.5

# mv /usr/bin/python
# cp /usr/bin/python3 /usr/bin/python
# python --version
Python 3.5.2
1

using these commands can help you:

  1. check the version of python: ls /usr/bin/python*
  2. alias: alias python='/usr/bin/pythonxx'
  3. re-login: . ~/.bashrc
  4. check the python version again: python --version
1

You can achieve this by applying below simple steps -

  1. Check python version on terminal - python --version
  2. Get root user privileges. On terminal type - sudo su
  3. Write down the root user password
  4. Execute this command to switch to python 3.6 -
    update-alternatives --install /usr/bin/python python /usr/bin/python3 1
  5. Check python version - python --version
  6. Done.
1

update-alternatives is to change system symlinks to user-defined/admin-defined symlinks. If you have multiple versions of python3 installed in your system and want to control which python3 version to invoke when python3 is called. Do the following

sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.4 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.5 2

Run below command if you want to change priority in the future.

update-alternatives --config python3

Explanation:-

sudo update-alternatives --install <symlink_origin> <name_of_config> <symlink_destination> <priority>

You can go on change name_of_config to python4, but then you have to invoke update-alternatives --config with python4 to reconfigure.

Using this approach you are able to control system python version and python3 version separately.

0

open terminal and type: gedit ~/.bashrc and add the following line:

alias python=python3.x

where x is your python version.

Happy coding.

0

the first check do you python3.6 folder

ls /usr/bin/python3.6

if you have folder like python3.6 good to go

then update-alternatives

sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 1

now update new config for python3

sudo update-alternatives --config python3

check python version

python3 --version

New contributor
user9860532 is a new contributor to this site. Take care in asking for clarification, commenting, and answering. Check out our Code of Conduct.
0

You can change the simbolic link by ln -sf python3.6 python3 inside /usr/bin. With this when you call python3 it will execute python3.6

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.