Как заставить программную команду 'python' выполнить Python 3?

То python программная команда выполняет Python 2. Python 3 может быть выполнен с помощью python3 команда. Как можно выполнить Python 3 с помощью python командовать?

Вы можете установить общесистемный пакет:

$ sudo apt install python-is-python3

Смотрите предостережения:пакет python-is-python3 в Ubuntu 20.04 - что это такое и что он на самом деле делает?

Простым безопасным способом было бы использовать псевдоним. Поместите это в ~/.bashrc или ~/.bash_aliases файл:

alias python=python3

После добавления вышеуказанного в файл запустите source ~/.bashrc или source ~/.bash_aliases.

Например:

$ python --versionPython 2.7.6$ python3 --versionPython 3.4.3$ alias python=python3$ python --versionPython 3.4.3

Чтобы обойти псевдоним, используйте command встроенная команда:

$ command python --versionPython 2.7.6

Другой способ обойти псевдоним - использовать \ до команды.

$ \python --version Python 2.7.6

Чтобы отключить псевдоним в текущей оболочке, используйте unalias встроенная команда:

$ unalias python$ python --versionPython 2.7.6

На Ubuntu 20.04+ просто установите python-is-python3 пакет:

sudo apt install python-is-python3

Кроме того, вы можете предотвратить установку Python 2 в качестве зависимости от чего-либо в будущем с помощью apt-mark hold:

sudo apt-mark hold python2 python2-minimal python2.7 python2.7-minimal libpython2-stdlib libpython2.7-minimal libpython2.7-stdlib 

[Июнь 2016] Рекомендуемое место для получения информации о переходе - официальное Ubuntu Python страница.


Из Ubuntu wiki:

Как для Ubuntu, так и для Debian у нас есть текущий проект цели чтобы сделать Python 3 предпочтительной версией Python по умолчанию в дистрибутивах.

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

  • /usr/bin/python будет указывать на Python 3. Нет, этого не произойдет (если только БОДРОСТЬ ДУХА 394 выступает за иное, что сомнительно в обозримом будущем). /usr/bin/python и /usr/bin/python2 будет указывать на Python 2.7 и /usr/bin/python3 будет указывать на последнюю поддерживаемую версию Python 3.

  • Python 2 будет удален из архива. Нет, этого не произойдет. Мы ожидаем, что Python 2.7 будет поддерживаться и доступен в Ubuntu в течение довольно длительного времени, учитывая, что БОДРОСТЬ ДУХА 373 обещает техническую поддержку по исправлению ошибок в восходящем потоке до 2020 года.

Не рекомендуется изменять символическую ссылку из-за других зависимостей пакета, но у них "есть текущие цели проекта, чтобы сделать Python 3 предпочтительной версией Python по умолчанию в дистрибутивах".


Для использования CLI, например @Radu Rădeanu, я бы рекомендовал ввести псевдоним в имя пользователя ~/.bashrc, .bash_aliases файл (различные файлы, включая ~/.bash_profile, загружаются по крайней мере один раз, в основном предназначены для организационных целей, но могут варьироваться в зависимости от платформы). Питон виртуальные среды тоже хорошо работает.

Примеры псевдонимов:

alias python=python3

или

alias python='/usr/bin/python3'

Скрипты все равно должны использовать что-то вроде #!/usr/bin/env python3 для перекрестной совместимости.

С помощью env подходит для смешанного использования с виртуальными средами.

Примечание (спасибо @wjandrea): псевдонимы являются частью среды выполнения bash, а не пользовательской среды. Следовательно, они недоступны для шебанга (#!). Если вы предпочитаете псевдоним python=python3, то некоторые program.py без shebang можно было бы выполнить, вызвав интерпретатор с псевдонимами следующим образом python program.py. Сглаживание также может быть полезно для систем с несколькими версиями python3, такими как 3.4 и 3.6 вместе взятые.

Обновление: Я узнал, что это неправильный путь, поскольку Python2 и Python3 не взаимозаменяемы.

Вы можете попробовать использовать инструмент командной строки update-alternatives.

$ sudo update-alternatives --config python

Если вы получаете сообщение об ошибке "нет альтернатив для python", то самостоятельно настройте альтернативу с помощью следующей команды:

$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10

Измените путь /usr/bin/python3 к вашей желаемой версии python соответственно.

Ubuntu и остальные дистрибутивы Linux, если на то пошло, по-прежнему в значительной степени зависят от Python 2.7 для ряда приложений и команд. Если вы измените ссылку по умолчанию на "python" на Python 3.x, то ряд функций Python начнут выдавать ошибки утверждения.

Например, в Ubuntu 'pip' для одного больше не будет работать корректно, если вы непосредственно не отредактируете файл и не измените shebang на ссылку '#!/usr/bin/env python2.7'. В версиях RHEL (Red Hat Enterprise Linux), таких как Red Hat, Fedora и CentOS, команда 'Yum' также зависит от Python 2.7.

Моя точка зрения здесь заключается в том, что вы могли бы привести к тому, что значительный объем кода начнет выдавать ошибки утверждения только для того, чтобы вы могли ввести "python" в терминале для ссылки на Python 3.x.

Вам гораздо лучше использовать команду 'python3' в терминале и shebang '#!/usr/bin/env python3' в ваших файлах Python 3.x.

Делать

cd ~gedit .bash_aliases

затем напишите либо

alias python=python3

или

alias python='/usr/bin/python3'

Сохраните файл, закройте терминал и откройте его снова.
Ссылка

Я нахожу очень полезным просто удалить /usr/bin/python и /usr/bin/pip. Это вынуждает все программы полагаться на команды "python2" и "python3".

Хотя некоторые необязательные и устаревшие пакеты зависят от #!/usr/bin/python чтобы работать, я бы предпочел отправлять исправления для этих программ, чем продолжать совершать странные, а иногда и трудные для отладки ошибки.

cat > /usr/local/bin/py << 'EOF'#!/bin/dashpython3 "$@"EOF

(при условии, что у вас есть разрешение на запись в /usr/local/bin) аналогично

cat > /usr/local/bin/pyi << 'EOF'#!/bin/dashpython3 -i "$@"EOF

затем вы вводите только py (и используете py в строках #!) для выбранного вами python.

Просто предупреждение: не пытайтесь изменить символическую ссылку /usr/bin/python, чтобы указывать на python3 вместо 2.7. Многие программы, доступные в репозиториях Ubuntu, требуют, чтобы /usr/bin/python был совместим с python 2.x.

С другой стороны, любой, кто приходит сюда, потому что он пытается узнать о том, как сделать Python 3 своим по умолчанию, может вместо этого найти применение в исследовании виртуальных сред (например, virtualenv) или контейнеров (например, LXC или Docker).

@wjandrea, да, даже в виртуальной среде “python” следует сохранять как значение "python2`. Я имел в виду свой комментарий как способ иметь версию Python для конкретного приложения вместо того, чтобы пытаться обойти системный Python.

sudo apt install python-is-python3 (для Ubuntu 20.04+)

В связи с предупреждением soulsource вверху см. [PEP 394](PEP 394 – The “python” Command on Unix-Like Systems | peps.python.org /), который стандартизирует соглашения об именовании для сосуществующих исполняемых файлов Python и на которые программисты Python и разработчики пакетов полагаются (и должны).

А, теперь я понял, что вы имели в виду под обновлением… На самом деле разработчики Ubuntu работают над этим: Python/3 - Ubuntu Wiki “Целью выпуска Ubuntu 14.04 LTS является наличие только Python 3 на образах компакт-дисков для рабочего стола”.

Если вы являетесь одним из пользователей, запускающих программы на python у себя дома, безопасным и консервативным решением будет добавить `alias python='echo Python2 слишком устарел. Пожалуйста, запустите python3" для вашего .bashrc

@Kevin Я только что попробовал использовать virtualenv, но как только я открыл Gedit из терминала, я получил кучу ошибок, потому что его плагинам, похоже, нужен Python 2. Аналогичные проблемы могут возникнуть с любым другим программным обеспечением, которое полагается на команду “python”, являющуюся Python 2.

@soulsource, да, я в курсе этого. вот почему я спросил, доступна ли опция “обновить” или нет.

Я думаю, что ответ Раду Рэдяну уже довольно близок к оптимальному решению. Это относится только к одному пользователю и действует только для прямого запуска python, вводящего команду python, не затрагивая программы с #!/usr/bin/python shebang.