На компьютере установлены две или больше разных версий 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. |