Как изменить версию python linux

Разработчики python не сделали поддержку версий и это не очень хорошо. Появляется ряд проблем, а именно с версиями ПО. Одни утилиты требуют версию 2.7.х, другие 3.4.х. И я хотел бы в своей статье, рассказать как можно использовать несколько версий или переключить версию python в Unix/Linux.

Разработчики python не сделали поддержку версий и это не очень хорошо. Появляется ряд проблем, а именно с версиями ПО. Одни утилиты требуют версию  2.7.х, другие 3.4.х. И я хотел бы в своей статье, рассказать как можно использовать несколько версий или переключить версию python в Unix/Linux.

Переключить версию python в Unix/Linux

Сейчас по умолчанию, во многих Unix/Linux ОС используется питон 2.6. Чтобы проверить какая версия питона используется в системе, выполните:

$ python -V

Python 2.6

Выполним установку python:

Обновить Python до последней версии в Unix/Linux

Установка pip/setuptools/wheel в Unix/Linux

Так же, посмотрим:

$ ls -al /usr/local/bin/python*

Получаем:

lrwxrwxrwx. 1 root root 7 Apr 11 10:38 /usr/local/bin/python -> python2
lrwxrwxrwx. 1 root root 9 Apr 11 10:38 /usr/local/bin/python2 -> python2.7
-rwxr-xr-x. 1 root root 6294753 Apr 11 10:37 /usr/local/bin/python2.7
-rwxr-xr-x. 1 root root 1687 Apr 11 10:38 /usr/local/bin/python2.7-config
lrwxrwxrwx. 1 root root 16 Apr 11 10:38 /usr/local/bin/python2-config -> python2.7-config
lrwxrwxrwx. 1 root root 9 Apr 11 11:10 /usr/local/bin/python3 -> python3.6
-rwxr-xr-x. 2 root root 9961651 Apr 11 11:08 /usr/local/bin/python3.6
lrwxrwxrwx. 1 root root 17 Apr 11 11:10 /usr/local/bin/python3.6-config -> python3.6m-config
-rwxr-xr-x. 2 root root 9961651 Apr 11 11:08 /usr/local/bin/python3.6m
-rwxr-xr-x. 1 root root 3083 Apr 11 11:10 /usr/local/bin/python3.6m-config
lrwxrwxrwx. 1 root root 16 Apr 11 11:10 /usr/local/bin/python3-config -> python3.6-config
lrwxrwxrwx. 1 root root 14 Apr 11 10:38 /usr/local/bin/python-config -> python2-config

И так, чтобы переключить версию питона, я буду использовать несколько методов.

-===СПОСОБ 1 — использование алиаса===-

Один из самых простых способов — это использовать алиасы. Открываем файл:

# vim ~/.bashrc

И, прописываем сам алиас на нужную версию питона:

alias python='/usr/local/bin/python3.6'

Чтобы изменения вступили в силу, выполняем:

$ . ~/.bashrc

После этого, можно проверять версию:

$ python --version
Python 3.6.1

Видно что все отлично работает.

-===СПОСОБ 2 — использование alternatives===-

Чтобы изменить версию python глобально, я воспользуюсь alternatives утилитой:

# alternatives --list | grep -i python

Если вывода не будет, — это будет означать, что python alternative еще не сконфигурирована. Чтобы это сделать, выполните ( взято в качестве примера):

# alternatives --install /usr/bin/python python /usr/local/bin/python3.6 2
# alternatives --install /usr/bin/python python /usr/local/bin/python2.7 1

Вышеупомянутые команды будут указывать команде alternatives для создания соответствующих символических ссылок, которые будут использоваться при выполнении команды python. Я назначил python3.6 более высокий приоритет ( цифра 2), — это означает, что если не выбрана альтернатива для python, то по умолчанию будет использоваться python3.6. После выполнения вышеуказанных команд ваша версия python должна измениться на python3.6 из-за ее более высокого приоритета.

Проверяем:

# python -V

Python 3.6.1

Для переключения между вышеперечисленными версиями python теперь достаточно просто:

# alternatives --config python

Чтобы удалить питон с alternatives, используем:

# update-alternatives --remove python /usr/local/bin/python3.6

Как-то так! На этому у меня все, статья «Переключить версию python в Unix/Linux» завершена.

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

sudo update-alternatives --config python3
update-alternatives: error: no alternatives for python3

GAD3R's user avatar

GAD3R

61k30 gold badges126 silver badges189 bronze badges

asked Dec 13, 2017 at 9:13

codeclue's user avatar

8

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

answered Dec 14, 2017 at 12:11

GAD3R's user avatar

GAD3RGAD3R

61k30 gold badges126 silver badges189 bronze badges

14

You can achieve this by applying below simple steps —

  1. Check python version on terminal: python --version

  2. Execute this command to switch to python 3.6:

    sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 1
    
  3. Check python version: python --version

  4. Done.

Kusalananda's user avatar

Kusalananda

307k35 gold badges598 silver badges896 bronze badges

answered Feb 2, 2019 at 9:37

Vineet Jain's user avatar

Vineet JainVineet Jain

8036 silver badges2 bronze badges

2

if you have multiple version of python in your system. You just need to update the symbolic link of python inside /usr/bin/

root@irshad:/usr/bin# ls -lrth python*
lrwxrwxrwx 1 root root    9 Apr 16  2018 python -> python2.7
-rwxr-xr-x 1 root root 3.6M Nov 12  2018 python2.7
-rwxr-xr-x 2 root root 4.4M May  7 14:58 python3.6

In above example if you see the output of python --version you will get python2.7

Now update the python symlink using below command-

root@irshad:/usr/bin# unlink python
root@irshad:/usr/bin# ln -s /usr/bin/python3.6 python
root@irshad:/usr/bin# python --version
Python 3.6.8

answered May 25, 2019 at 18:03

IRSHAD's user avatar

IRSHADIRSHAD

5375 silver badges3 bronze badges

3

Using these commands can help you:

  1. check the version of python:
    ls /usr/bin/python*
  2. alias:
    alias python='/usr/bin/pythonxx' (add this to . ~/.bashrc)
  3. re-login or source . ~/.bashrc
  4. check the python version again:
    python --version

Verena Haunschmid's user avatar

answered Nov 8, 2018 at 11:44

Newt's user avatar

NewtNewt

3692 silver badges4 bronze badges

3

First check that you have a python3.6 folder?

ls /usr/bin/python3.6

If you have «python3.6» folder, you are good to go. Now update-alternatives

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

then update new config for python3

sudo update-alternatives --config python3

Finally, check default python3 version:

python3 --version

Stewart's user avatar

Stewart

11.1k1 gold badge36 silver badges67 bronze badges

answered May 21, 2019 at 10:29

mmblack's user avatar

mmblackmmblack

1471 silver badge4 bronze badges

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 /usr/bin/python.bak
# cp /usr/bin/python3 /usr/bin/python
# python --version
Python 3.5.2

Adersh Ps's user avatar

answered Dec 4, 2018 at 11:13

nabi sheyhov's user avatar

1

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

answered Dec 13, 2017 at 9:27

3

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.

answered Mar 13, 2019 at 20:02

wittyurchin's user avatar

1

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

answered May 21, 2019 at 10:42

SPAWN35's user avatar

Последнее обновление: 16.12.2022

На одной рабочей машине одновременно может быть установлено несколько версий Python. Это бывает полезно, когда идет работа с некоторыми внешними библиотеками, которые поддерживают разные версии python, либо в силу каких-то
других причин нам надо использовать несколько разных версий. Например, на момент написания статьи последней и актуальной является версия Python 3.11.
Но, допустим, необходимо также установить версию 3.10, как в этом случае управлять отдельными версиями Python?

Windows

На странице загрузок https://www.python.org/downloads/ мы можем найти ссылку на нужную версию:

Управление несколькими версиями Python

И также загрузить ее и установить:

Установка разных версий Python на Windows

Чтобы при использовании интерпретатора Python не прописывать к нему весь путь, добавим при установке его в переменные среды. Но здесь надо учитывать, что в переменных среды
может содержаться несколько путей к разным интерпретаторам Python:

Установка разных версий Python на Windows в переменные среды

Та версия Python, которая находится выше, будет версией по умолчанию. С помощью кнопки «Вверх» можно нужную нам версию переместить в начало, сделав версией по умолчанию.
Например, в моем случае это версия 3.11. Соответственно, если я введу в терминале команду

или

то консоль отобразит версию 3.11:

C:python>python --version
Python 3.11.0

Для обращения к версии 3.10 (и всем другим версиям) необходимо использовать указывать номер версии:

C:python>py -3.10 --version
Python 3.10.9

например, выполнение скрипта hello.py с помощью версии 3.10:

Подобным образом можно вызывать и другие версии Python.

MacOS

На MacOS можно установить разные версии, например, загрузив с официального сайта пакет установщика для определенной версии.

Для обращения к определенной версии Python на MacOS указываем явным образом подверсию в формате python3.[номер_подверсии]. Например, у меня установлена версия
Python 3.10. Проверим ее версию:

Аналогично обращении к версии python3.9 (при условии если она установлена)

К примеру выполнение скрипта hello.py с помощью версии python 3.10:

Linux

На Linux также можно установить одновременно несколько версий Python. Например, установка версий 3.10 и 3.11:

sudo apt-get install python3.10
sudo apt-get install python3.11

Одна из версий является версий по умолчанию. И для обращения к ней достаточно прописать python3, например, проверим версию по умолчанию:

Для обращения к другим версиям надо указывать подверсию:

python3.10 --version
python3.11 --version

Например, выполнение скрипта hello с помощью версии Python 3.10:

Но может сложиться ситуация, когда нам надо изменить версию по умолчанию. В этом случае применяется команда update-alternatives для связывания
определенной версии Python с командой python3. Например, мы хотим установить в качестве версии по умолчанию Python 3.11. В этом случае последовательно выполним следующие команды:

sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 2

Числа справа указывают на приоритет/состояние. Так, для версии 3.11 указан больший приоритет, поэтому при обращении к python3 будет использоваться именно версия 3.11 (в моем случае это Python 3.11.0rc1)

Управление версиями Python в linux

С помощью команды

sudo update-alternatives --config python3

можно изменить версию по умолчанию

Установка версии Python по умолчанию в linux

I was trying to set default python version to python3 in Ubuntu 16.04. By default it is python2 (2.7). I followed below steps :

update-alternatives --remove python /usr/bin/python2
update-alternatives --install /usr/bin/python python /usr/bin/python3

but I’m getting the following error for the second statement,

rejeesh@rejeesh-Vostro-1015:~$ update-alternatives --install /usr/bin/python python /usr/bin/python3
update-alternatives: --install needs <link> <name> <path> <priority>

Use 'update-alternatives --help' for program usage information.   

SuperStormer's user avatar

SuperStormer

4,8625 gold badges23 silver badges34 bronze badges

asked Feb 1, 2017 at 17:57

RejeeshChandran's user avatar

RejeeshChandranRejeeshChandran

4,0583 gold badges23 silver badges32 bronze badges

8

The second line mentioned can be changed to

[sudo] update-alternatives --install /usr/bin/python python /usr/bin/python3 10

This gives a priority of 10 for the path of python3.

The disadvantage of alternatively editing .bashrc is that using the commands with sudo will not work.

Nico Schlömer's user avatar

Nico Schlömer

50.9k26 gold badges190 silver badges237 bronze badges

answered May 14, 2018 at 13:10

Pardhu's user avatar

10

EDIT:

I wrote this when I was young and naive, update-alternatives is the better way to do this. See @Pardhu’s answer.


Outdated answer:

Open your .bashrc file nano ~/.bashrc. Type alias python=python3
on to a new line at the top of the file then save the file with ctrl+o
and close the file with ctrl+x. Then, back at your command line type
source ~/.bashrc. Now your alias should be permanent.

Nico Schlömer's user avatar

Nico Schlömer

50.9k26 gold badges190 silver badges237 bronze badges

answered Feb 1, 2017 at 18:17

Steampunkery's user avatar

SteampunkerySteampunkery

3,8412 gold badges20 silver badges28 bronze badges

9

To change Python 3.6.8 as the default in Ubuntu 18.04 to Python 3.7.

Install Python 3.7

Steps to install Python3.7 and configure it as the default interpreter.

  1. Install the python3.7 package using apt-get

    sudo apt-get install python3.7

  2. Add Python3.6 & Python 3.7 to update-alternatives

sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 2
  1. Update Python 3 to point to Python 3.7

    sudo update-alternatives --config python3
    Enter 2 for Python 3.7

  2. Test the version of python

python3 --version
Python 3.7.1 

Alvin Sartor's user avatar

Alvin Sartor

2,0973 gold badges21 silver badges36 bronze badges

answered Aug 24, 2019 at 23:03

Purushottam Prabhakar's user avatar

5

If you have Ubuntu 20.04 LTS (Focal Fossa) you can install python-is-python3:

sudo apt install python-is-python3

which replaces the symlink in /usr/bin/python to point to /usr/bin/python3.

answered May 18, 2020 at 20:12

silviot's user avatar

silviotsilviot

4,4755 gold badges38 silver badges51 bronze badges

3

To change to python3, you can use the following command in terminal alias python=python3.

answered Feb 1, 2017 at 18:00

DanteVoronoi's user avatar

DanteVoronoiDanteVoronoi

1,1031 gold badge12 silver badges20 bronze badges

2

Update:
Since Ubuntu 20.04, the python3 is the default version, but still, python is not registered as python3 by default. In order to make that happen, you can simply do :

sudo apt install python-is-python3

For more information you can check this out.
Old way:

Do

cd ~
gedit .bash_aliases

then write either

alias python=python3

or

alias python='/usr/bin/python3'

Save the file, close the terminal and open it again.
You should be fine now! Link

answered Sep 15, 2017 at 18:34

Hossein's user avatar

HosseinHossein

23.3k34 gold badges117 silver badges217 bronze badges

1

A simple safe way would be to use an alias. Place this into ~/.bashrc file:
if you have gedit editor use

gedit ~/.bashrc

to go into the bashrc file and then at the top of the bashrc file make the following change.

alias python=python3

After adding the above in the file. run the below command

source ~/.bash_aliases or source ~/.bashrc

example:

$ python —version

Python 2.7.6

$ python3 —version

Python 3.4.3

$ alias python=python3

$ python —version

Python 3.4.3

Community's user avatar

answered Feb 9, 2018 at 10:32

Khan's user avatar

KhanKhan

1,21411 silver badges11 bronze badges

0

Just follow these steps to help change the default python to the newly upgrade python version. Worked well for me.

  • sudo apt-install python3.7 Install the latest version of python you want
  • cd /usr/bin Enter the root directory where python is installed
  • sudo unlink python or sudo unlink python3 . Unlink the current default python
  • sudo ln -sv /usr/bin/python3.7 python Link the new downloaded python version
  • python --version Check the new python version and you’re good to go

answered Dec 30, 2019 at 9:19

Shorya Sharma's user avatar

At First Install python3 and pip3

sudo apt-get install python3 python3-pip

then in your terminal run

alias python=python3

Check the version of python in your machine.

python --version

answered Nov 25, 2019 at 18:32

As an added extra, you can add an alias for pip as well (in .bashrc or bash_aliases):

alias pip=’pip3′

You many find that a clean install of python3 actually points to python3.x so you may need:

alias pip=’pip3.6′
alias python=’python3.6′

answered Mar 28, 2018 at 14:28

Paraic's user avatar

ParaicParaic

1371 silver badge6 bronze badges

This is a simple way that works for me.

sudo ln -s /usr/bin/python3 /usr/bin/python

You could change /usr/bin/python3 for your path to python3 (or the version you want).

But keep in mind that update-alternatives is probably the best choice.

answered Jan 15, 2021 at 14:18

cbcram's user avatar

cbcramcbcram

1652 silver badges6 bronze badges

As it says, update-alternatives --install needs <link> <name> <path> and <priority> arguments.

You have link (/usr/bin/python), name (python), and path (/usr/bin/python3), you’re missing priority.

update-alternatives --help says:

<priority> is an integer; options with higher numbers have higher priority in automatic mode.

So just put a 100 or something at the end

answered Feb 1, 2017 at 19:30

user7502402's user avatar

get python path from

ls /usr/bin/python*

then set your python version

alias python="/usr/bin/python3"

answered Oct 16, 2018 at 4:26

pradeep karunathilaka's user avatar

To change Python 3.6.8 as the default in Ubuntu 18.04 from Python 2.7 you can try the command line tool update-alternatives.

sudo update-alternatives --config python

If you get the error «no alternatives for python» then set up an alternative yourself with the following command:

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 2

Change the path /usr/bin/python3 to your desired python version accordingly.

The last argument specified it priority means, if no manual alternative selection is made the alternative with the highest priority number will be set. In our case we have set a priority 2 for /usr/bin/python3.6.8 and as a result the /usr/bin/python3.6.8 was set as default python version automatically by update-alternatives command.

we can anytime switch between the above listed python alternative versions using below command and entering a selection number:

update-alternatives --config python

answered Jun 27, 2020 at 12:24

Ranjeet Singh's user avatar

For another non-invasive, current-user only approach:

# First, make $HOME/bin, which will be automatically added to user's PATH
mkdir -p ~/bin
# make link actual python binaries
ln -s $(which python3) python
ln -s $(which pip3) pip

python pip will be ready in a new shell.

answered Mar 22, 2019 at 8:52

tdihp's user avatar

tdihptdihp

2,2792 gold badges22 silver badges40 bronze badges

Simply remove python-is-python2:

sudo apt purge python-is-python2

And install python-is-python3:

sudo apt install python-is-python3

It will automate the process of transition to new python3. Optionally you can get rid of remaining packages later:

sudo apt autoremove && sudo apt autoclean

answered May 25, 2020 at 8:22

Farab Alipanah's user avatar

0

Set priority for default python in Linux terminal by adding this:

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 1

Here, we set python3 to have priority 10 and python2 to priority 1. This will make python3 the default python. If you want Python2 as default then make a priority of python2 higher then python3

answered Nov 6, 2020 at 4:52

SouMitya chauhan's user avatar

       ~$ sudo apt-get install python3.9
/usr/bin$ cd /usr/bin
/usr/bin$ sudo unlink python3
/usr/bin$ sudo ln -sv /usr/bin/python3.9 python3
/usr/bin$ python3 --version
          Python 3.9.5
/usr/bin$ pip3 --version
          pip 20.0.2 from /usr/lib/python3/dist-packages/pip (python 3.9)

answered Jan 3, 2022 at 3:46

devp's user avatar

devpdevp

1,9582 gold badges15 silver badges26 bronze badges

2

The best way in ubuntu 18.04 which will work for all users is

sudo vim /etc/bash.bashrc
add lines
alias python=python3
alias pip=pip3

Save the changes and restart .

After restart what ever version of python 3 you have in the system along with python 2.7 will be taken as default. You could be more specific by saying the following in alias if you have multiple version of python 3.

sudo vim /etc/bash.bashrc
add lines
alias python=python3.6
alias pip=pip3.6

answered Mar 22, 2019 at 10:12

Mian Asbat Ahmad's user avatar

Mian Asbat AhmadMian Asbat Ahmad

3,14810 gold badges44 silver badges68 bronze badges

sudo rm /usr/bin/python3 #remove existing link
sudo ln /usr/bin/python3.8 /usr/bin/python3 # create a new link to the version of your choice

answered Oct 1, 2021 at 9:11

Sajibe Kanti's user avatar

1

You didn’t include the priority argument

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 5

You can replace 5 with any priority you want. A higher priority alternative takes precedence over lower priority.

answered Sep 2, 2020 at 12:26

Vishad Goyal's user avatar

If there is a possibility to use particular python version directly, I would go for it compared to update-alternatives and alias solution.

Ex.

python3.6 -m pip install pytest
ptyhon3.6 -m pytest test_sample.py

-m executes particular module for that particular python version.
The first line will install pytest for for that particular version and user in possible location /home/user/.local/lib/python3.5/site-packages

answered Dec 15, 2021 at 1:21

JanPo's user avatar

JanPoJanPo

1851 silver badge8 bronze badges

At first, Make sure Python3 is installed on your computer

Go to your terminal and type:

cd ~/ to go to your home directory

If you didn’t set up your .bash_profile yet, type touch .bash_profile to create your .bash_profile.

Or, type open -e .bash_profile to edit the file.

Copy and save alias python=python3 in the .bash_profile.

Close and reopen your Terminal. Then type the following command to check if Python3 is your default version now:

python --version

You should see python 3.x.y is your default version.

Cheers!

answered Sep 21, 2019 at 19:13

nurealam siddiq's user avatar

1

Python – это язык высокоуровневый язык программирования, широко используемый в данное время.

Он доступен для всех популярных операционных систем.

Вы можете установить более одной версии Python на одной системе.

После установки нескольких версий Python вы можете переключить Python по умолчанию с помощью инструмента update-alternatives.

Как переключаться между несколькими версиями PHP в Ubuntu

Всем разработчикам Python рекомендуется использовать виртуальную среду для приложений. Это обеспечивает изолированную среду для приложения с определенной версией Python.

Переключение версии Python на Ubuntu и Debian

Инструмент командной строки update-alternatives предназначен для создания и поддержки символических ссылок для команд по умолчанию.

С его помощью мы можем легко переключать команды на разные версии.

В данном учебнике на системе Debian установлены Python3.9 и Python2.7.

Мы создадим группу для обеих команд и установим символические ссылки.

Создайте симлинк из /usr/bin/python2.7 в /usr/bin/python и задайте имя группы как “python”.

Позже имя группы будет использоваться для переключения ссылок.

sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1 
update-alternatives: using /usr/bin/python2.7 to provide /usr/bin/python (python) in auto mode

Измените ссылку симлинка /usr/bin/python3.9 на /usr/bin/python и установите имя группы на “python”.

Имя группы должно быть одинаковым для всех версий python.

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.9 2 

Вывод:

update-alternatives: using /usr/bin/python3.9 to provide /usr/bin/python (python) in auto mode

Повторите шаг 2, чтобы добавить в группу еще одну версию Python, которая уже установлена в вашей системе.

На данном этапе вы добавили два бинарника python в группу с именем “python”.

Теперь вы можете легко переключиться на любую версию с помощью следующих команд.

Здесь “python” – это имя группы, определенное в приведенных выше командах.

sudo update-alternatives --config python 

Вывод: [Выберите опцию]

There are 2 choices for the alternative python (providing /usr/bin/python).

  Selection    Path                Priority   Status
------------------------------------------------------------
  0            /usr/bin/python3.9   2         auto mode
* 1            /usr/bin/python2.7   1         manual mode
  2            /usr/bin/python3.9   2         manual mode

Press  to keep the current choice[*], or type selection number:

В приведенном выше выводе Python 2.7 установлен в качестве текущей версии.

Чтобы изменить ее на Python 3.9, нужно ввести 0 или 2 и нажать Enter.

Вот и все.

Текущая версия Python в вашей системе изменена.

Просто введите следующую команду для просмотра корректной активной версии Python

python -V 

Вывод:

Python 3.9.2

Вы можете добавить несколько версий Python в группу (Шаги: 01 и 02) и легко переключаться между ними.

Заключение

В этом руководстве вы узнали о переключении версий Python по умолчанию в системах Ubuntu и Debian Linux.

Вместо переключения версий вы также можете настроить виртуальную среду Python для своих приложений.

см. также:

  • Как переключаться между TTY без использования функциональных клавиш в Linux
  • Как переключаться между различными версиями команд в Linux
  • 🐍 Как поменять местами две переменные в Python?
  • 🐍 Как отобразить доступные версии пакета Python

В большинстве операционных систем Python предустановлен
(ну, кроме Windows, но даже там теперь есть
команда python, которая предложит установить интерпретатор из магазина приложений).
В Unix-подобных операционных системах, таких как Linux и MacOS, Python
пустил корни очень глубоко. Множество компонентов ОС рассчитывают, что Python
установлен и работает стабильно. Это и хорошо, и плохо.

Это хорошо, потому что хотя бы какой-то Python в большинстве систем доступен из
коробки — бери и пользуйся. Иногда доступно сразу несколько версий
интерпретатора, например, python2 указывает на устаревшую версию 2.7,
python3 — на какую-нибудь стабильную версию Python 3, типа 3.6 или 3.7, а
просто python указывает либо на одно, либо на другое (в последнее время
предпочтение чаще отдаётся третьей версии). Для обучения или для
тестирования этого может быть вполне достаточно.

С другой стороны, это плохо, потому что, как правило, предустановленный Python
настолько стабилен, что уже успел зарасти мхом.
В некоторых системах до сих пор предустановлен только Python 2,
но даже если вам повезёт получить Python третьей версии,
то наверняка он будет отставать от последней версии на пару минорных релизов.
Не факт, что вам это подойдёт.

Иногда нужно иметь сразу несколько версий Python для работы над
разными проектами, например, 3.7 и 3.8. В некоторых ОС нужные версии можно
установить через пакетный менеджер (например, в Fedora через dnf)
— из основных репозиториев или из сторонних.
Но зачастую такие репозитории содержат не все релизы
интерпретаторов, а лишь выбранное мейнтейнерами репозиториев подмножество.

Решение у всех этих проблем одно — нужно установить недостающие версии
интерпретатора, какими бы они ни были. Этому и посвящён пост.

pyenv — утилита, которая позволяет
легко переключаться между несколькими версиями интерпретатора Python, а
также устанавливать новые. Позволяет устанавливать, наверное, вообще
все известные науке версии интерпретаторов Python. Работает просто и незаметно.

pyenv — это всего лишь один из последователей аналогичного инструмента
из мира Ruby — rbenv.
Есть ещё и nodenv для Node.js,
который тоже вдохновился rbenv.

Проект написан целиком на bash. Это значит, что он никак не зависит
от Python — было бы забавно, если бы для установки Python нужен был бы Python.
Также это означает, что на Windows pyenv работать не будет
(тред с обсуждением).
Следует отметить, что в Windows проблема установки нескольких версий
и не возникает — там всегда можно скачать и установить
сколько угодно интерпретаторов с официального сайта,
а pylauncher поможет выбрать
из них нужную версию.
Кроме того, пользователи современных версий
Windows могут использовать pyenv внутри WSL (Windows Subsystem for Linux).
Ещё это означает, что у авторов много отваги — я бы не решился писать
на bash что-то настолько сложное. Как же хорошо, что всё уже написано.

Установка

  1. Скачаем pyenv.

    Установка pyenv производится простым клонированием git-репозитория.

    У проекта есть умный скрипт,
    который скачает pyenv и его сотоварищей:

    $ curl https://pyenv.run | bash
    

    Скрипт не требует прав суперпользователя (без sudo), потому что
    всё устанавливается в домашнюю директорию пользователя. Туда же
    будут устанавливаться и интерпретаторы. Если страшно запускать
    какие-то скрипты из интернета (так и должно быть), то прочитать код скрипта можно
    здесь.

  2. Настроим шелл.

    Предыдущая команда перед завершением должна была напечатать инструкции
    по настройке шелла. Допустим, в случае с bash она выводит
    следующее:

    WARNING: seems you still have not added 'pyenv' to the load path.
    
    # Load pyenv automatically by adding
    # the following to ~/.bashrc:
    
    export PATH="~/.pyenv/bin:$PATH"
    eval "$(pyenv init -)"
    eval "$(pyenv virtualenv-init -)"
    

    В случае с zsh нужно будет добавить те же самые строки в ~/.zshrc.

    В случае с fish в связи с особенностями самого шелла инструкции отличаются:

    # Load pyenv automatically by adding
    # the following to ~/.config/fish/config.fish:
    
    set -x PATH "~/.pyenv/bin" $PATH
    status --is-interactive; and . (pyenv init -|psub)
    status --is-interactive; and . (pyenv virtualenv-init -|psub)
    

    Кстати, горячо рекомендую попробовать fish, очень удобный шелл.

  3. Установим зависимости для сборки.

    При установке новой версии интерпретатора через pyenv под капотом
    происходит сборка из исходников, поэтому для успешной установки
    необходимы некоторые зависимости. Полный и актуальный список
    для своей ОС смотрите здесь
    или здесь.
    Лучше установить всё заранее.

  4. Перезапустим шелл и проверим установку.

    $ pyenv --version
    pyenv 1.2.18
    

Как это работает

pyenv работает благодаря манипуляциям над переменной окружения $PATH.
Эта переменная содержит в себе список директорий, в которых ОС будет искать
исполняемые файлы, вызванные без указания полного пути. Именно
благодаря этой переменной мы можем в терминале вместо /bin/cat вызывать
просто cat. Когда мы набираем в терминале имя программы (cat),
ОС перебирает директории из $PATH слева направо, пока в одной
из них (в данном примере /bin) не найдёт программу с именем cat,
которую и запустит. Поиск прекращается после первого совпадения.

Команда pyenv init -, которую мы добавили в конфиг шелла (.bashrc или аналог)
добавляет директории pyenv в самое начало переменной $PATH.
Зачем это нужно? pyenv создаёт небольшие исполняемые файлы,
так называемые файлы-прослойки (shims), для всех команд,
которыми он собирается управлять, например, python, pip, ipython и так далее.
Эти файлы-прослойки должны попасть в $PATH прежде самих управляемых программ
и «затенить» системные python, pip и так далее.
Эти файлы-прослойки в конечном счёте просто вызывают сам pyenv
с нужными аргументами.
Таким образом pyenv перехватывает обращения к некоторым именам,
и анализируя поступившую к нему информацию,
принимает решение о том, какую именно версию Python нужно запустить.
При выборе версии pyenv принимает во внимание следующие факторы в
указанном порядке:

  1. Переменная окружения PYENV_VERSION, если указана.

    В неё можно указать какую конкретно версию Python нужно использовать
    в рамках текущего сеанса. Удобно, если вам по какой-то причине понадобится
    сменить выбранную версию интерпретатора, например, в одном
    из окон терминала.

  2. Локальная версия Python.

    При помощи специального файла .python-version можно настроить
    версию интерпретатора для определенного проекта. Захо́дите внутрь
    директории (cd project/), и pyenv внезапно понимает, что нужно
    сменить Python. Выхо́дите обратно — версия Python меняется на глобальную.
    Это распространяется и на все поддиректории проекта —
    pyenv рекурсивно ищет файл .python-version вверх по файловой системе,
    пока не дойдёт до корня.

  3. Глобальная версия Python.

    В файле ~/.pyenv/version записана глобальная версия Python, которая
    будет использоваться по умолчанию, если не сконфигурирована локальная
    версия.

Вам вряд ли придётся вручную трогать эти файлы, потому что у pyenv есть
удобные команды (pyenv local и pyenv global),
чтобы ими управлять, но знать о файлах всё равно полезно.

Использование

Установка новой версии Python

Сначала посмотрим, какие версии Python pyenv может установить:

$ pyenv install --list
...
3.6.0
3.6-dev
3.6.1
3.6.2
3.6.3
3.6.4
3.6.5
3.6.6
3.6.7
3.6.8
3.6.9
3.6.10
3.7.0
3.7-dev
3.7.1
3.7.2
3.7.3
3.7.4
3.7.5
3.7.6
3.7.7
3.8.0
3.8-dev
3.8.1
3.8.2
3.9.0a6
3.9-dev
...

Список довольно длинный, поэтому я его подсократил. Обычно вас будут
интересовать такие версии, как 3.8.2 или 3.7.7 — это версии самой
распространённой реализации интерпретатора CPython. Но если
вам нужна экзотика, то pyenv умеет устанавливать любые сорта интерпретаторов
Python (pypy3.6-7.3.0, stackless-3.7.5, jython-2.7.1,
ironpython-2.7.7, micropython-1.12 и т.д.). Для вас ведь не стало
новостью, что существует много разных реализаций интерпретатора Python?

Установим CPython 3.8.2:

$ pyenv install 3.8.2
Downloading Python-3.8.2.tar.xz...
Installing Python-3.8.2...

Через пару минут ожидания ваш новоиспечённый Python будет готов.

Можно сразу же назначить эту версию глобальной:

$ pyenv global 3.8.2
$ python -V
Python 3.8.2

Давайте в целях демонстрации установим ещё парочку интерпретаторов:

$ pyenv install 2.7.18
$ pyenv install 3.9.0a6

Получим список установленных версий интерпретатора:

$ pyenv versions
  2.7.18
* 3.8.2 (set by /home/br0ke/.pyenv/version)
  3.9.0a6

Кстати, если нужно, то можно делать активными сразу несколько
версий одновременно:

$ pyenv global 3.8.2 2.7.18

Теперь вывод версий покажет следующее:

$ pyenv versions
* 2.7.18 (set by /home/br0ke/.pyenv/version)
* 3.8.2 (set by /home/br0ke/.pyenv/version)
  3.9.0a6

А работать это будет вот таким образом:

$ python -V
Python 3.8.2
$ python3 -V
Python 3.8.2
$ python2 -V
Python 2.7.18

Грубо говоря, та версия, которая указана первой (3.8.2),
имеет приоритет и занимает все нужные ей имена. Следующие версии (2.7.18)
могут занять любые оставшиеся свободные имена (в данном случае, это только имя
python2).

А файл глобальной версии ~/.pyenv/version на данный момент имеет вот
такое содержимое:

$ cat ~/.pyenv/version
3.8.2
2.7.18

Локальная версия

Давайте создадим директорию и войдём в неё:

$ mkdir my_project
$ cd my_project

Представим, что в этой директории мы будем разрабатывать некий
проект, на котором мы хотим опробовать фишки нового Python 3.9.
Сообщим об этом pyenv:

В директории появился файл .python-version со следующим содержимым:

$ cat .python-version
3.9.0a6

На данный момент список версий показывает следующее (удобно использовать
эту команду, чтобы понять какую версию и почему pyenv активирует):

$ pyenv versions
  2.7.18
  3.8.2
* 3.9.0a6 (set by /home/br0ke/my_project/.python-version)

Изменения немедленно вступили в силу:

$ python -V
Python 3.9.0a6

Но эта конфигурация никак не влияет на работу pyenv вне директории проекта:

$ cd ..
$ python -V
3.8.2

Как и в случае с глобальной конфигурацией, можно локально активировать
сразу несколько версий интерпретатора.

Установим IPython

Часто бывает нужно установить какой-нибудь пакет так, чтобы он тоже
стал доступен из командной строки. Допустим, что нам нужно установить
ipython — более удобную версию REPL Python.
Сделаем это:

$ cd my_project
$ pip install ipython

Запустим:

$ ipython
Python 3.9.0a6 (default, May  3 2020, 16:58:20)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.14.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]:

Программа сразу доступна, благодаря тому, что pyenv очень умный и
создал новый файл-прослойку (shim) автоматически:

$ which ipython
/home/br0ke/.pyenv/shims/ipython

Вне директории с проектом ipython будет недоступен, ведь он же установлен
в локальный интерпретатор 3.9.0a6, а снаружи активирован другой
интерпретатор — можете проверить самостоятельно.

Возникают ситуации, когда по какой-то причине прослойка не создалась
или с ней случилось что-то ещё, например, удалилась:

$ rm $(which ipython)
$ ipython
No such file or directory

Не беда! Можно попросить pyenv пересоздать их все заново:

И всё работает снова:

$ ipython
Python 3.9.0a6 (default, May  3 2020, 16:58:20)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.14.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]:

Можно вообще добавить команду pyenv rehash в свой ~/.bashrc (или аналог),
чтобы при запуске шелла гарантированно иметь рабочие файлы-прослойки (shims).

Заключение

pyenv — очень удобный и полезный инструмент в ситуациях, когда нужную вам
версию Python нельзя установить средствами операционной системы.
Я вообще предпочитаю устанавливать все нужные мне версии интерпретатора
самостоятельно через pyenv или asdf, даже если ОС уже содержит точно
такую же версию — пусть ОС использует свою копию для служебных целей,
а я для разработки буду использовать свою собственную копию, где смогу
проводить любые кровавые эксперименты, не боясь поломать ОС.

Обязательно
подпишитесь на уведомления
о новых постах в блоге, чтобы ничего не пропустить!

Дополнительное чтение

  • Репозиторий проекта на GitHub;
  • Туториал на RealPython;
  • Альтернатива: универсальный менеджер версий asdf.

Обложка: Schwoaze, Snakes Black Snakes Animal Free Photo

I’ve got two versions of python on my linuxbox:

$python
Python 2.6.6 (r266:84292, Jul 10 2013, 22:48:45) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 


$ /usr/local/bin/python2.7
Python 2.7.3 (default, Oct  8 2013, 15:53:09) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

$ which python
/usr/bin/python
$ ls -al /usr/bin/python
-rwxr-xr-x. 2 root root 4864 Jul 10 22:49 /usr/bin/python

How can I make 2.7 be the default version so when I type python it puts me in 2.7?

asked Oct 8, 2013 at 19:04

Anthony's user avatar

4

You probably don’t actually want to change your default Python.

Your distro installed a standard system Python in /usr/bin, and may have scripts that depend on this being present, and selected by #! /usr/bin/env python. You can usually get away with running Python 2.6 scripts in 2.7, but do you want to risk it?

On top of that, monkeying with /usr/bin can break your package manager’s ability to manage packages. And changing the order of directories in your PATH will affect a lot of other things besides Python. (In fact, it’s more common to have /usr/local/bin ahead of /usr/bin, and it may be what you actually want—but if you have it the other way around, presumably there’s a good reason for that.)

But you don’t need to change your default Python to get the system to run 2.7 when you type python.


First, you can set up a shell alias:

alias python=/usr/local/bin/python2.7

Type that at a prompt, or put it in your ~/.bashrc if you want the change to be persistent, and now when you type python it runs your chosen 2.7, but when some program on your system tries to run a script with /usr/bin/env python it runs the standard 2.6.


Alternatively, just create a virtual environment out of your 2.7 (or separate venvs for different projects), and do your work inside the venv.

answered Oct 8, 2013 at 19:17

abarnert's user avatar

abarnertabarnert

347k48 gold badges588 silver badges657 bronze badges

11

Add /usr/local/bin to your PATH environment variable, earlier in the list than /usr/bin.

Generally this is done in your shell’s rc file, e.g. for bash, you’d put this in .bashrc:

export PATH="/usr/local/bin:$PATH"

This will cause your shell to look first for a python in /usr/local/bin, before it goes with the one in /usr/bin.

(Of course, this means you also need to have /usr/local/bin/python point to python2.7 — if it doesn’t already, you’ll need to symlink it.)

answered Oct 8, 2013 at 19:08

Amber's user avatar

AmberAmber

497k82 gold badges622 silver badges548 bronze badges

3

Enter the command

which python

//output:
/usr/bin/python

cd /usr/bin
ls -l

Here you can see something like this

lrwxrwxrwx 1 root   root            9 Mar  7 17:04  python -> python2.7

your default python2.7 is soft linked to the text ‘python’

So remove the softlink python

sudo rm -r python

then retry the above command

ls -l

you can see the softlink is removed

-rwxr-xr-x 1 root   root      3670448 Nov 12 20:01  python2.7

Then create a new softlink for python3.6

ln -s /usr/bin/python3.6 python

Then try the command python in terminal

//output:
Python 3.6.7 (default, Oct 22 2018, 11:32:17) 
[GCC 8.2.0] on linux

Type help, copyright, credits or license for more information.

vahdet's user avatar

vahdet

6,1319 gold badges48 silver badges102 bronze badges

answered Mar 7, 2019 at 11:55

Sreenath's user avatar

SreenathSreenath

811 silver badge5 bronze badges

2

Verify current version of python by:

$ python --version

then check python is symbolic link to which file.

  $ ll /usr/bin/python

Output Ex:

 lrwxrwxrwx 1 root root 9 Jun 16  2014 /usr/bin/python -> python2.7*

Check other available versions of python:

$ ls /usr/bin/python*

Output Ex:

/usr/bin/python     /usr/bin/python2.7-config  /usr/bin/python3.4         /usr/bin/python3.4m-config  /usr/bin/python3.6m         /usr/bin/python3m
/usr/bin/python2    /usr/bin/python2-config    /usr/bin/python3.4-config  /usr/bin/python3.6          /usr/bin/python3.6m-config  /usr/bin/python3m-config
/usr/bin/python2.7  /usr/bin/python3           /usr/bin/python3.4m        /usr/bin/python3.6-config   /usr/bin/python3-config     /usr/bin/python-config

If want to change current version of python to 3.6 version edit file ~/.bashrc:

vim ~/.bashrc

add below line in the end of file and save:

alias python=/usr/local/bin/python3.6

To install pip for python 3.6

$ sudo apt-get install python3.6 python3.6-dev
$ sudo curl https://bootstrap.pypa.io/ez_setup.py -o - | sudo python3.6
$ sudo easy_install pip

On Success, check current version of pip:

$ pip3 -V

Output Ex:

pip 1.5.4 from /usr/lib/python3/dist-packages (python 3.6)

answered Apr 4, 2019 at 10:48

Shiv Buyya's user avatar

Shiv BuyyaShiv Buyya

3,53929 silver badges24 bronze badges

All OS comes with a default version of python and it resides in /usr/bin. All scripts that come with the OS (e.g. yum) point this version of python residing in /usr/bin.
When you want to install a new version of python you do not want to break the existing scripts which may not work with new version of python.

The right way of doing this is to install the python as an alternate version.

e.g.
wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tar.bz2 
tar xf Python-2.7.3.tar.bz2
cd Python-2.7.3
./configure --prefix=/usr/local/
make && make altinstall

Now by doing this the existing scripts like yum still work with /usr/bin/python.
and your default python version would be the one installed in /usr/local/bin.
i.e. when you type python you would get 2.7.3

This happens because. $PATH variable has /usr/local/bin before usr/bin.

/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

If python2.7 still does not take effect as the default python version you would need to do

export PATH="/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin"

answered Dec 8, 2018 at 3:14

Prakash Kamath's user avatar

Simplest approach;
these three commands will help you set,

Python 2.x to 3.x

  1. see python version, use python --version (let you got installed one is 2.7.x)
  2. find where the Python 3 is installed, use which python3 ( or which python gives you current installation of python version)
  3. Last step, use aliasing, alias python=/usr/bin/python3.6 (one in above step)
  4. Now, run again, python --version, you will find, 3.6.x installed.

Python 3.x to 2.x (Almost Same)

  1. see python version, use python --version (let you got installed one is 3.6.x)
  2. find where the Python 2 is installed, use which python2 (which python gives you where current version of python is installed.)
  3. Last step, use aliasing, alias python=/usr/bin/python2.7 (one you get in above step)
  4. Now, run again, python --version, you will find, 2.x.x installed.

answered Mar 18, 2021 at 8:23

Kishore's user avatar

KishoreKishore

1,7742 gold badges20 silver badges27 bronze badges

I guess you have installed the 2.7 version manually, while 2.6 comes from a package?

The simple answer is: uninstall python package.

The more complex one is: do not install manually in /usr/local. Build a package with 2.7 version and then upgrade.

Package handling depends on what distribution you use.

answered Oct 8, 2013 at 19:08

emesik's user avatar

emesikemesik

2211 silver badge9 bronze badges

4

I’ve got two versions of python on my linuxbox:

$python
Python 2.6.6 (r266:84292, Jul 10 2013, 22:48:45) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 


$ /usr/local/bin/python2.7
Python 2.7.3 (default, Oct  8 2013, 15:53:09) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

$ which python
/usr/bin/python
$ ls -al /usr/bin/python
-rwxr-xr-x. 2 root root 4864 Jul 10 22:49 /usr/bin/python

How can I make 2.7 be the default version so when I type python it puts me in 2.7?

asked Oct 8, 2013 at 19:04

Anthony's user avatar

4

You probably don’t actually want to change your default Python.

Your distro installed a standard system Python in /usr/bin, and may have scripts that depend on this being present, and selected by #! /usr/bin/env python. You can usually get away with running Python 2.6 scripts in 2.7, but do you want to risk it?

On top of that, monkeying with /usr/bin can break your package manager’s ability to manage packages. And changing the order of directories in your PATH will affect a lot of other things besides Python. (In fact, it’s more common to have /usr/local/bin ahead of /usr/bin, and it may be what you actually want—but if you have it the other way around, presumably there’s a good reason for that.)

But you don’t need to change your default Python to get the system to run 2.7 when you type python.


First, you can set up a shell alias:

alias python=/usr/local/bin/python2.7

Type that at a prompt, or put it in your ~/.bashrc if you want the change to be persistent, and now when you type python it runs your chosen 2.7, but when some program on your system tries to run a script with /usr/bin/env python it runs the standard 2.6.


Alternatively, just create a virtual environment out of your 2.7 (or separate venvs for different projects), and do your work inside the venv.

answered Oct 8, 2013 at 19:17

abarnert's user avatar

abarnertabarnert

347k48 gold badges588 silver badges657 bronze badges

11

Add /usr/local/bin to your PATH environment variable, earlier in the list than /usr/bin.

Generally this is done in your shell’s rc file, e.g. for bash, you’d put this in .bashrc:

export PATH="/usr/local/bin:$PATH"

This will cause your shell to look first for a python in /usr/local/bin, before it goes with the one in /usr/bin.

(Of course, this means you also need to have /usr/local/bin/python point to python2.7 — if it doesn’t already, you’ll need to symlink it.)

answered Oct 8, 2013 at 19:08

Amber's user avatar

AmberAmber

497k82 gold badges622 silver badges548 bronze badges

3

Enter the command

which python

//output:
/usr/bin/python

cd /usr/bin
ls -l

Here you can see something like this

lrwxrwxrwx 1 root   root            9 Mar  7 17:04  python -> python2.7

your default python2.7 is soft linked to the text ‘python’

So remove the softlink python

sudo rm -r python

then retry the above command

ls -l

you can see the softlink is removed

-rwxr-xr-x 1 root   root      3670448 Nov 12 20:01  python2.7

Then create a new softlink for python3.6

ln -s /usr/bin/python3.6 python

Then try the command python in terminal

//output:
Python 3.6.7 (default, Oct 22 2018, 11:32:17) 
[GCC 8.2.0] on linux

Type help, copyright, credits or license for more information.

vahdet's user avatar

vahdet

6,1319 gold badges48 silver badges102 bronze badges

answered Mar 7, 2019 at 11:55

Sreenath's user avatar

SreenathSreenath

811 silver badge5 bronze badges

2

Verify current version of python by:

$ python --version

then check python is symbolic link to which file.

  $ ll /usr/bin/python

Output Ex:

 lrwxrwxrwx 1 root root 9 Jun 16  2014 /usr/bin/python -> python2.7*

Check other available versions of python:

$ ls /usr/bin/python*

Output Ex:

/usr/bin/python     /usr/bin/python2.7-config  /usr/bin/python3.4         /usr/bin/python3.4m-config  /usr/bin/python3.6m         /usr/bin/python3m
/usr/bin/python2    /usr/bin/python2-config    /usr/bin/python3.4-config  /usr/bin/python3.6          /usr/bin/python3.6m-config  /usr/bin/python3m-config
/usr/bin/python2.7  /usr/bin/python3           /usr/bin/python3.4m        /usr/bin/python3.6-config   /usr/bin/python3-config     /usr/bin/python-config

If want to change current version of python to 3.6 version edit file ~/.bashrc:

vim ~/.bashrc

add below line in the end of file and save:

alias python=/usr/local/bin/python3.6

To install pip for python 3.6

$ sudo apt-get install python3.6 python3.6-dev
$ sudo curl https://bootstrap.pypa.io/ez_setup.py -o - | sudo python3.6
$ sudo easy_install pip

On Success, check current version of pip:

$ pip3 -V

Output Ex:

pip 1.5.4 from /usr/lib/python3/dist-packages (python 3.6)

answered Apr 4, 2019 at 10:48

Shiv Buyya's user avatar

Shiv BuyyaShiv Buyya

3,53929 silver badges24 bronze badges

All OS comes with a default version of python and it resides in /usr/bin. All scripts that come with the OS (e.g. yum) point this version of python residing in /usr/bin.
When you want to install a new version of python you do not want to break the existing scripts which may not work with new version of python.

The right way of doing this is to install the python as an alternate version.

e.g.
wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tar.bz2 
tar xf Python-2.7.3.tar.bz2
cd Python-2.7.3
./configure --prefix=/usr/local/
make && make altinstall

Now by doing this the existing scripts like yum still work with /usr/bin/python.
and your default python version would be the one installed in /usr/local/bin.
i.e. when you type python you would get 2.7.3

This happens because. $PATH variable has /usr/local/bin before usr/bin.

/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

If python2.7 still does not take effect as the default python version you would need to do

export PATH="/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin"

answered Dec 8, 2018 at 3:14

Prakash Kamath's user avatar

Simplest approach;
these three commands will help you set,

Python 2.x to 3.x

  1. see python version, use python --version (let you got installed one is 2.7.x)
  2. find where the Python 3 is installed, use which python3 ( or which python gives you current installation of python version)
  3. Last step, use aliasing, alias python=/usr/bin/python3.6 (one in above step)
  4. Now, run again, python --version, you will find, 3.6.x installed.

Python 3.x to 2.x (Almost Same)

  1. see python version, use python --version (let you got installed one is 3.6.x)
  2. find where the Python 2 is installed, use which python2 (which python gives you where current version of python is installed.)
  3. Last step, use aliasing, alias python=/usr/bin/python2.7 (one you get in above step)
  4. Now, run again, python --version, you will find, 2.x.x installed.

answered Mar 18, 2021 at 8:23

Kishore's user avatar

KishoreKishore

1,7742 gold badges20 silver badges27 bronze badges

I guess you have installed the 2.7 version manually, while 2.6 comes from a package?

The simple answer is: uninstall python package.

The more complex one is: do not install manually in /usr/local. Build a package with 2.7 version and then upgrade.

Package handling depends on what distribution you use.

answered Oct 8, 2013 at 19:08

emesik's user avatar

emesikemesik

2211 silver badge9 bronze badges

4

Понравилась статья? Поделить с друзьями:
  • Как изменить версию postgresql
  • Как изменить версию php рег ру
  • Как изменить версию php на хостинге timeweb
  • Как изменить версию php на хостинге reg ru
  • Как изменить версию php на хостинге beget