Sudo update alternatives config python

How to make python3.7 default

Whenever you will write python3 it will replace it with python3.7 .

Or you can use command update-alternatives which is preferred i.e:

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 

So here python3.7 will have higher priority then python3.6 . Then use:

sudo update-alternatives --config python3 

Press the enter key if you are satisfied

Trap for young players: I highly recommend using update-alternatives over the alias-approach, as aliases do not take effect in non-shell environments (also non-interactive shells ignore .bashrc). Take a python-file starting with the shebang #!/usr/bin/env python3 as an example: Run with ./myscript.py it would ignore your alias, while python3 myscript.py would run in python 3.7.1 in your case. Other common cases for ambiguities would be invoking commands via ssh, or from inside a shell-script.

Note that the alternatives variant above replaces /usr/bin/python instead of /usr/bin/python3 , and will cause issues with Python programs which expect python to be Python 2 (which is the case on Debian and derivatives). See also PEP 394 and the Debian Python policy.

On my Ubuntu 18.04 any of the two approaches caused the No module named ‘apt_pkg error and the Terminal to not start. I wanted to use python 3.8.1 instead of python 3.6.9.

I would like to expand on a previous answer as the two approaches given are not equivalent, and one of them can even break the system. The issue is there are two different things one could be trying to do by «changing the default python version».

Читайте также:  Php first to upper case

Quick summary

Do not use update-alternatives to change your default python version, as this will break system applications.

Further details

Bash alias

The first, is that for an interactive shell, one simply wishes to easily open the desired python by writing

This is accomplished by adding the line

to .bashrc . If one is using another shell, add this to the appropriate config file. This also has the advantage that if it causes problems for any reason, one can simply remove the offending line in .bashrc and restart the terminal.

update-alternatives

The second thing one could mean by «changing the default python version», is to change the default python version for all programs, including those not launched from an interactive shell. This is the result of running

$ sudo update-alternatives --config python3 

However, if you run this in a clean install of Debian/Ubuntu, you will notice that the command returns

update-alternatives: error: no alternatives for python3 

even if you have multiple versions of python 3 installed via apt . There is a very good reason for this.

The problem with the this is that many system applications use python, and depending on the exact distribution, many use python 3. Changing which version is called by the command python3 globally will force these applications to use this version. Although different version of python 3 are largely compatible, there are still features moved and removed between releases. If a system application uses these features, changing python3 to launch a newer version will break the application.

Testing

I created a fresh install of Ubuntu 18.04 in a VM. Adding the bash alias caused no immediate issues.

Using the update-alternatives method caused issues with apt . Specifically, I got

ModuleNotFoundError: No module named 'apt_pkg' 

Fixing your system if you ran the update-alternatives method

If we ran update-alternatives and broke apt , we can still fix the system. During my testing, the terminal was still able to be opened. One can go back to the default python by running

$ sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.X 1000 

where 3.X is your systems original python 3 version, and 1000 is just some high priority to make sure it is on top. Then, one can run

$ sudo update-alternatives --config python3 

and make sure the original system python is selected. Reboot the system and it will be back to normal.

Источник

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

Одно из моих первых разочарований при разработке на Python не имело ничего общего с самим Python, а скорее с излишне изотерическими действиями по развертыванию приложений на Python. Учебные курсы и руководства отлично справляются с задачей обучения студентов запуску Python кода локально, но действительно стоящие приложения не запускают на локальных машинах: они работают на интернет серверах потому что именно в этом и есть их назначение, не так ли? Хотя может быть я высказал сумасшедшую идею.

Ubuntu 20.04 это первая LTS версия Ubuntu в которой отсутствует Python2 и которая поставляется из коробки с установленной версией Python 3.8.5. Но что если написанное вами приложение использующее более новую версию Python? Если вы, как и я, пытались заменить установленную по умолчанию в системе версию, то в процессе сломали вашу ОС. Если до этого вам никто не говорил не делать этого, тогда я возьму на себя эту честь: не делайте этого.

Итак, что же нам делать? Существует нескольок путей как обновить версию Python на Ubuntu, но использование вастроенного в Ubuntu’s механизма «alternative install» оптимально по нескольким причинам:

  1. Мы хотим оставить нетронутойси стемную версию Python
  2. По возможности не возиться с Python PATH
  3. Мы можем удобно переключать активную версию Python с использованием CLI

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

Скачивание последней версии Python

Первый шаг должен быть вам знаком: нам необходимо обновить зеркала Ubuntu и установленные пакеты, что бы быть уверенными что мы загружаем последние версии пакетов при установке чего-либо:

Обязательные обновления: $ sudo apt update && sudo apt upgrade -y

Установка другой версии Python на Ubuntu трубует установки целого ряда зависимых библиотек для Python. Я честно гвооря не уверен что делает половина из этого, и скорее всего это никому из нас никогда не понадобится. Но поверьте, это необходимый шаг:

Установка зависимостей Python: $ 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 libffi-dev zlib1g-dev

Именно здесь многие могут начать установку Python с помощью Ubuntu package manager командой apt-get install python3.X. Мы скачаем и соберем последнюю версию Python из исходные кодов по нескольким причинам. Если версия Python достаточно свежая, некоторые машины под управлением Ubuntu могут не иметь обновленных зеркал что бы получить последнюю версию, но важнее всего то, что этот способ позволяет упростить управление несколькими версиями Python на Ubuntu.

Последнюю версию Python всегда можно найти на официальной странице с релизами на Python.org:

Первая ссылка на указанной странице должна называться Latest Python 3 Release — Python 3.X. Перейдя по ней необходимо прокрутить вниз страницы до секции «Files» и скопировать URL ссылки Gzipped source tarball.

На вашей Ubuntu машине необходимо теперь скачать эти исходные коды с помощью утилиты «wget». Ниже пример команд для скачивания заархивированной версии Python 3.9.2 в папку /opt и распаковка ее:

Скачивание Python: $ cd /opt $ sudo wget https://www.python.org/ftp/python/3.9.2/Python-3.9.2.tgz $ sudo tar xzf Python-3.9.2.tgz

Теперь последняя версия Python скачана. После этого нам остается ее установить… правильно.

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

Главное разочарование установки Python с использованием команды apt-get install python3.X это что Python будет установлен нормально, но Ubuntu будет по прежнему использовать установленную в системе по умолчанию версию Python. К счастью для нас Ubuntu позволяет устанавливать нам дополнительные (альтернативные) версии Python с использованием команды make altinstall :

Установка из исходных кодов: $ cd Python-3.9.2 $ sudo ./configure —enable-optimizations $ sudo make altinstall

Исполнение этих команд может занять некоторое время. После того, как команды будут выполнены вы можете увидеть python3.9 в вашей директории /usr/local/bin/ :

Проверка версии Python $ cd /usr/local/bin/ $ ls

Итак, теперь у нас есть две установленные версии Python: установленная в системе по-умолчанию Python 3.8.5 и добавленная нами новая версия Python 3.9.2. Мы хотим оставить нетронутой установленную в системе версию по-умолчанию, но мы так же хотим запускать написанные нами приложения в версии Python 3.9… итак как мы можем этим управлять?

Linux предусматривает такой сценарий с помощью команды update-alternatives . Мы можем сказать Ubuntu что у нас есть ветка с альтернативной версией на нашей машине, это предоставит нам возможность легко переключаться между ними. Вот как это работает:

Включение альтернативной версии Python $ update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1 $ update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.9 2

Мы запускаем update-alternatives дважды: один раз для Python 3.8, и один раз для Python 3.9. Теперь мы можем использовать команду update-alternatives —list что бы посмотреть все альтернативные версии какого-либо установленного ПО:

Список установленных версий Python $ update-alternatives --list python3 /usr/bin/python3.6 /usr/local/bin/python3.8

Теперь мы можем переключаться между установленными версиями Python! Запустите следующую команду:

Переключение между версиями $ update-alternatives --config python3

После выполнения команды вы должны получить подсказку как в приведенном ниже примере. Это будет список всех доступных версий Python в вашей системе. Выберите версию которую хотите использовать введя соответствующий номер версии указанный в колонке Selection :

CLI для переключения активной версии Python Selection Path Priority Status ------------------------------------------------------------ 0 /usr/bin/python3.8 3 auto mode * 1 /usr/bin/python3.8 3 manual mode 2 /usr/local/bin/python3.10 2 manual mode Press to keep the current choice[*], or type selection number: 

И вы это сделали! Для переключения версии Python все что нужно — это ввести запрошенный номер версии Python указанный в колонке selection .

Это прозвучит абсурдно, но изменить версию Python в Ubuntu ничего не сломав — это впечатляет. Я бы сказал что это в основном вина тех, кто преподаает Python. Если «учат те, кто не может сделать», то было бы логично предположить что Python преподают те, кто не запустил ни одного значимого проекта. Это было жестко, но не бейте меня нисмотря ни на что.

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

Установка pip3 $ apt install python3-pip $ python3.9 -m pip install --upgrade pip

Вы наверняка заметили что Ubuntu 20.04 (и новее) заставляют нас явно указывать python3 при использовании Python несмотря на отсутствие Python 2 на машине. Это немного раздражает, но так же потенциально может сломать библиотеки которые пытаются использовать Python (NPM, sqlite и node-qyp например)

Возможно вы чувствуетет в себе достаточно сил что бы создать alias, который будет при обращении к python ссылаться на python3, но к сожалению это не будет работать так, как вам бы хотелось. Хорошая новость в том, что есть простое решение:

Скажите Ubuntu что python это python3 $ apt-get install python-is-python3

Да, есть целый пакет для Ubuntu созданный специально для решения этой задачи. Но это работает ¯_(ツ)_/¯.

Источник

Оцените статью