Программирование PC На компьютере установлены две или больше разных версий Python Mon, November 11 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


На компьютере установлены две или больше разных версий Python Печать
Добавил(а) microsin   

На рабочей станции с Windows или Linux может быть установлено несколько версий Python. Как определить, какая из них будет запускаться в ответ на команду python?

На Windows все просто. Исполняемый файл называется python.exe, и его разные версии находятся в разных каталогах. Версия, которая будет запускаться первой, определяется порядком настроенных путей поиска в переменной окружения %PATH%. Команда echo %PATH% покажет содержимое этой переменной, а с помощью утилиты "Изменение системных переменных среды" можно легко и удобно настроить этот порядок запуска, или можно модифицировать переменную окружения %PATH% в теле скрипта с помощью команды set. Но как с этим обстоят дела на Linux?

На моей системе Ubuntu 20.04 установлено 2 версии Python, 2.7.18 и 3.8.10:

$ /usr/bin/python2 -V
Python 2.7.18
$ /usr/bin/python3 -V
Python 3.8.10

Проще всего воспользоваться командами whereis и find. Например, команда whereis python может выдать примерно следующее:

$ whereis python
python: /usr/bin/python3.8 /usr/bin/python2.7 /usr/bin/python /usr/bin/python3.8-config
 /usr/lib/python3.8 /usr/lib/python2.7 /usr/lib/python3.9 /etc/python3.8 /etc/python2.7
 /usr/local/lib/python3.8 /usr/local/lib/python2.7 /usr/include/python3.8 /usr/share/python

Пример поиска с помощью find:

$ find / -iname python3 2>/dev/null
/etc/python3
/home/домен/user/.espressif/python_env/idf5.1_py3.8_env/bin/python3
/home/домен/user/.espressif/python_env/idf4.4_py3.8_env/bin/python3
/home/linuxbrew/.linuxbrew/Homebrew/Library/Taps/homebrew/homebrew-core/Aliases/python3
/usr/lib/python3
/usr/share/bash-completion/completions/python3
/usr/share/python3
/usr/share/lintian/overrides/python3
/usr/share/doc/python3
/usr/bin/python3
/snap/core/13425/etc/python3
/snap/core/13425/usr/bin/python3
/snap/core/13425/usr/lib/python3
/snap/core/13425/usr/share/bash-completion/completions/python3
/snap/core/13425/usr/share/doc/python3
/snap/core/13425/usr/share/python3
/snap/core/13741/etc/python3
/snap/core/13741/usr/bin/python3
/snap/core/13741/usr/lib/python3
/snap/core/13741/usr/share/bash-completion/completions/python3
/snap/core/13741/usr/share/doc/python3
/snap/core/13741/usr/share/python3
/snap/gnome-3-38-2004/115/usr/lib/python3
/snap/gnome-3-38-2004/115/usr/share/python3
/snap/wine-platform-runtime-core20/37/usr/lib/python3
/snap/wine-platform-runtime-core20/37/usr/share/python3
/snap/wine-platform-runtime-core20/38/usr/lib/python3
/snap/wine-platform-runtime-core20/38/usr/share/python3
/snap/core20/1611/usr/bin/python3
/snap/core20/1611/usr/lib/python3
/snap/core20/1611/usr/share/bash-completion/completions/python3
/snap/core20/1611/usr/share/doc/python3
/snap/core20/1611/usr/share/lintian/overrides/python3
/snap/core20/1611/usr/share/python3
/snap/core20/1623/usr/bin/python3
/snap/core20/1623/usr/lib/python3
/snap/core20/1623/usr/share/bash-completion/completions/python3
/snap/core20/1623/usr/share/doc/python3
/snap/core20/1623/usr/share/lintian/overrides/python3
/snap/core20/1623/usr/share/python3

По умолчанию используется версия Python 2.7.18:

$ python -V
Python 2.7.18

Команда which python покажет, что Python по умолчанию запускается символической ссылкой python, которая находится в каталоге /usr/bin:

$ which python
/usr/bin/python
$ ls /usr/bin
...
pygmentize
 pyjwt3
 python
 python2
 python2.7
 python3
 python3.8
 python3.8-config
 python3-config
 python3-futurize
 python3-pasteurize
 pyvenv
 pyversions
...

Команда stat покажет, что символическая ссылка python настроена на запуск исполняемого файла python2:

$ stat /usr/bin/python
  Файл: /usr/bin/python -> python2
  Размер: 7          Блоков: 0          Блок В/В: 4096   символьная ссылка
Устройство: fd00h/64768d   Инода: 2094327     Ссылки: 1
Доступ: (0777/lrwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Доступ:        2022-11-14 06:07:46.603561666 +0300
Модифицирован: 2020-04-15 13:45:44.000000000 +0300
Изменён:       2022-10-13 16:08:17.521693134 +0300
Создан:        -

[Команда update-alternatives]

Смена текущей версии Python формализуется и упрощается командой update-alternatives.

Просмотр, какая сейчас версия установлена:

$ python --version
Python 2.7.18

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

$ ls /usr/bin/ | grep python
dh_python2
python
python2
python2.7
python3
python3.8
python3.8-config
python3-config
python3-futurize
python3-pasteurize
x86_64-linux-gnu-python3.8-config
x86_64-linux-gnu-python3-config

Установка альтернативы 1 для версии python3.8:

$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8 1
update-alternatives: используется /usr/bin/python3.8 для предоставления /usr/bin/python (python) в
 автоматическом режиме
$ sudo update-alternatives --config python
Есть только одна альтернатива в группе ссылок python (предоставляющая /usr/bin/python):
/usr/bin/python3.8
Настраивать нечего.

Установка текущей версии python3.8:

$ sudo update-alternatives --set python /usr/bin/python3.8
$ python --version
Python 3.8.10

Установка альтернативы 2 для версии python2.7:

$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 2

Переключение обратно на версию python2.7:

$ sudo update-alternatives --config python
Есть 2 варианта для альтернативы python (предоставляет /usr/bin/python).
 
  Выбор   Путь            Приор Состояние
------------------------------------------------------------
  0            /usr/bin/python2.7   2         автоматический режим
  1            /usr/bin/python2.7   2         ручной режим
* 2            /usr/bin/python3.8   1         ручной режим 
 
Press < enter> to keep the current choice[*], or type selection number: 1
$ python --version
Python 2.7.18

[Ссылки]

1. Change the Python3 default version in Ubuntu site:unix.stackexchange.com.
2Управление несколькими версиями Python с помощью pyenv.

 

Добавить комментарий


Защитный код
Обновить

Top of Page