проблема в проверке установлен ли python 3 - PullRequest
0 голосов
/ 30 марта 2020

Я хочу проверить, установлена ​​ли python 3 на мою Ubuntu. Я использую этот скрипт:

#!/usr/bin/env sh

#install firefox if does not exist
if ! command -v python3 >/dev/null 2>&1
        then
                echo "not installed"
        else
                echo "installed"
fi

Когда я запускаю этот скрипт, вывод installed, но когда я проверяю python, используя python --version, я получаю этот вывод:

Python 2.7.17

Что, насколько я знаю, означает, что последняя версия python на моем Ubuntu - 2.7, а не 3.x. Что не так?

Выход command -v python3; echo $?:

/usr/bin/python3
0

Выход ls -l /usr/bin/python3:

lrwxrwxrwx 1 root root 9 Nov 14 09:13 /usr/bin/python3 -> python3.7

Выход ls -l /usr/bin/python3.7:

-rwxr-xr-x 2 root root 5102632 Oct 27 11:43 /usr/bin/python3.7

Выход which python:

/usr/bin/python

Выход ls -l /usr/bin/python:

lrwxrwxrwx 1 root root 7 Jan 19 08:04 /usr/bin/python -> python2

Выход ls -l /usr/bin/python2:

lrwxrwxrwx 1 root root 9 Jan 19 08:04 /usr/bin/python2 -> python2.7

Также у меня есть другая Ubuntu на отдельной виртуальной машине, вывод python --version возвращает command 'python' not found, но когда я выполняю вышеупомянутые команды и для этой виртуальной машины, она возвращает аналогичные ответы (указывая, что python установлен).

Ответы [ 3 ]

2 голосов
/ 30 марта 2020

https://www.python.org/dev/peps/pep-0394/

Примечание. Вы можете создать среду, в которой установлены Python 2 и Python 3, и python может указывать на любое из них. (Скорее всего python2 для целей обратной совместимости.) Python 3 приложения должны всегда использовать команду python3, а не python.

1 голос
/ 30 марта 2020

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

Итак, когда вы установили Python, он добавил Python 2 в / usr / bin / (может быть / usr / bin / python2, может быть /usr/bin/python2.7, et c. ) и указал / usr / bin / python на то же место. Когда вы установили Python 3, он также установил Python 3 в /usr/bin/python3.

Когда вы проверяете, установлен ли python3, вы обнаружите, что это. Согласно PEP 394 , / usr / bin / python должен ссылаться на Python 2. Документация по Ubuntu объясняет, что это означает, а что нет:

Что это не значит:

/ usr / bin / python будет указывать на Python 3. Нет, этого не произойдет (если только PEP 394 выступает за иное, что сомнительно в обозримом будущем). / usr / bin / python и / usr / bin / python2 будут указывать на Python 2.7, а / usr / bin / python3 будет указывать на последнюю поддерживаемую версию Python 3.

Python 2 будет удалено из архива. Нет, этого не произойдет. Мы ожидаем, что Python 2.7 останется поддерживаемой и доступной в Ubuntu в течение достаточно долгого времени, учитывая, что PEP 373 обещает поддержку исправления ошибок восходящего потока до 2020 года. Это будет было бы неплохо, если бы мы могли понизить Python 2 до юниверса, но в настоящее время проблематично c по техническим причинам, связанным с поддержкой нескольких Python версий в Debian / Ubuntu.

В основном, хотя вся разработка должна быть ориентирована на Python 3, команда python (/ usr / bin / python) должна указывать на Python 2 в порядке чтобы текущие программы не ломались .

Если вы хотите получить доступ к Python 3, рекомендуется позвонить python3. (Вы также можете перепривязать / usr / bin / python, чтобы указать python3, но это крайне не рекомендуется. Для большинства пользователей более полезным было бы создать псевдоним python3. )


Короткая версия: Ваш скрипт работает. Python 3 установлено. Если вы хотите, чтобы терминал открывал Python 3 при вводе python, , добавьте псевдоним alias python=python3.

1 голос
/ 30 марта 2020

Попробуйте команду whereis. Он скажет вам, где находится python3.

whereis python
Или еще лучше
whereis python3

Выходными данными должен быть путь или список путей. Вы можете увидеть что-то вроде:

python3: /usr/bin/python3.6m /usr/bin/python3.6 /usr/bin/python3.6m- config
/ usr / bin / python3 /usr/bin/python3.6-config /usr/lib/python3.6 / usr / lib / python3
/ usr / lib / python3 .7 /usr/lib/python3.8 /etc/python3.6 / etc / python3 / usr / local

Затем убедитесь, что ваша переменная PATH имеет по крайней мере один из каталогов выше. Переменная окружения PATH по сути представляет собой список каталогов, которые содержат исполняемые файлы (программы). Когда вы набираете что-то в командной строке, ваша терминальная программа будет искать в каталогах, перечисленных в PATH, указанный вами исполняемый файл.

echo $PATH

/ home / USER / .pyenv / shims: / home /USER/.pyenv/bin:/home/USER/esp/xtensa-esp32-
elf / bin: /home/USER/.local/bin: / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin:
/ sbin: / bin: / usr / games: / usr / local / games: / snap / bin

Возможно, у вас есть каталог в ваш PATH что-то напутал, или вам может понадобиться добавить новый каталог.

...