Как заставить программную команду 'python' выполнить Python 3?
331
Команда pythonпрограммы выполняет Python 2. Python 3 может быть выполнен с помощью python3команды. Как Python 3 может быть выполнен с помощью pythonкоманды?
Просто предупреждение: не пытайтесь изменить символическую ссылку / usr / bin / python, чтобы она указывала на python3 вместо 2.7. Многие программы, доступные в репозиториях Ubuntu, требуют, чтобы / usr / bin / python был совместим с python 2.x.
soulsource
1
Ах, теперь я понял, что вы имели в виду под обновлением ... На самом деле, над этим работают разработчики Ubuntu: wiki.ubuntu.com/Python/3 "Цель релиза Ubuntu 14.04 LTS - иметь только Python 3 на настольном CD картинки."
soulsource
1
С другой стороны, любой, кто приезжает сюда, потому что он пытается узнать, как сделать Python 3 по умолчанию, может вместо этого найти применение для исследования виртуальных сред (например, virtualenv) или контейнеров (например, LXC или Docker).
Кевин
1
В отношении предупреждения soulsource вверху см. PEP 394, который стандартизирует соглашения об именах для сосуществующих исполняемых файлов Python и на которые надеются (и должны) программисты Python и разработчики пакетов.
Дэвид Фёрстер
2
@wjandrea, да, даже в виртуальной среде, pythonследует понимать как значение python2. Я имел в виду мой комментарий как способ получить версию Python для конкретного приложения вместо того, чтобы пытаться обойти системный Python.
Кевин
Ответы:
370
Простой безопасный способ - использовать псевдоним. Поместите это в ~/.bashrcили ~/.bash_aliasesфайл:
alias python=python3
После добавления вышеуказанного в файл, запустите source ~/.bashrcили source ~/.bash_aliases.
на самом деле я хочу стереть 2.7 и заменить его на 3.3. Похоже, это плохая идея на данный момент ..
Гири
35
+1 нет смысла очищать 2.7, чтобы можно было работать с 3.3. Как много программного обеспечения по-прежнему зависит от 2,7; просто продолжай это делать.
И для Ubuntu, и для Debian у нас есть постоянные цели проекта, чтобы сделать Python 3 стандартной версией Python в дистрибутивах.
Что это не значит:
/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 3 стандартной, предпочтительной версией Python в дистрибутивах».
Для использования CLI, как @Radu Rădeanu , я бы рекомендовал поставить псевдоним в пользователя ~/.bashrc, .bash_aliasesфайл (различные файлы, в том числе ~/.bash_profile, загружаются по крайней мере один раз, в основном для организационных целей, но может варьироваться в зависимости от платформы). Виртуальные среды Python также хорошо работают.
Примеры псевдонимов:
alias python=python3
или же
alias python='/usr/bin/python3'
Скрипты все еще должны использовать что-то вроде #!/usr/bin/env python3для кросс-совместимости.
Использование envудобно для смешанного использования с виртуальными средами.
Примечание (спасибо @wjandrea): псевдонимы являются частью среды выполнения bash, а не пользовательской среды. Поэтому они не доступны для Шебанга ( #!). Если вы предпочитаете псевдоним python = python3, то некоторые из них program.pyбез шебанга могут быть выполнены, вызвав такой псевдоним интерпретатора, как этот python program.py. Псевдоним также может быть полезен для систем с несколькими версиями python3, такими как 3.4 и 3.6, вместе.
Похоже, это устарело: они планировали удалить python2 в Xenial, но не сделали этого.
OrangeDog
1
@OrangeDog, спасибо за обновление. Да, вики-страница, которую я цитировал, теперь помечена как устаревшая, так как за последние два года был достигнут больший прогресс в переходе только на Python 3. Новая страница, которая следует за этим прогрессом, является официальной страницей Ubuntu Python .
Кевин
«Последняя» страница также устарела относительно планов Xenial.
OrangeDog
Я бы не сказал, что он «устарел» настолько, насколько «он недавно не обновлялся». Похоже, это текущее место для хранения сообщений об этом. Однако, в комментариях здесь, я был бы признателен за любые другие недавние источники, которые кто-либо может найти. Добавление большего количества источников к моему ответу о том, почему бы не внести изменения в just python, на самом деле не имеет значения, пока преобразование не будет завершено. Даже тогда это может стать просто проблемой.
Кевин
2
Псевдонимы являются внутренними для Bash, а не частью среды, поэтому вам все равно придется использовать их python3в шебанге, а не в них python.
wjandrea
28
Обновление: я понял, что это неправильный путь, поскольку Python2 и Python3 не являются взаимозаменяемыми.
python2 и python3 не являются альтернативами. Не используйте для этого альтернативы обновления.
Jobin
Почему нет? Кто-нибудь из вас может объяснить, почему update-alternativesон не подходит для Python? Это из-за legacy.python.org/dev/peps/pep-0394 ?
Дмитрий Григорьев
11
альтернативами являются разные реализации для одних и тех же функций. python2 и python3 не предоставляют одинаковые функции.
Ely
Вы можете сделать что-то подобное, если вы вручную установили (через ppa или любую другую) другие версии python3. sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 2
Дэвид Баукум
Это то, что мне нужно было сделать для 18.04.2 vm, который не поставляется с python. Спасибо
Dark Star1
9
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» в терминале и «#! / Usr / bin / env python3» в файлах Python 3.x.
и вы можете предотвратить установку Python 2 и pip2 в качестве зависимости с
sudo apt-mark hold python python-pip
Посмотрите другие ответы о том, почему вы не хотите этого делать. Ubuntu 18.04+ больше не поставляется с Python 2, поэтому он не должен быть слишком плохим.
Что касается «Ubuntu 18.04 больше не поставляется с Python 2, так что он не должен быть слишком плохим». в Ubuntu (даже в версиях, в которых Python 2 не установлен по умолчанию), предполагается, что исполняемый файл называется pythonPython 2, поэтому это может сломать некоторые вещи.
Не проще ли использовать символическую ссылку? sudo ln -s /usr/bin/python3 /usr/local/bin/py
wjandrea
0
Я считаю очень полезным просто удалить / usr / bin / python и / usr / bin / pip. Это заставляет все программы полагаться на команды "python2" и "python3".
Хотя некоторые необязательные и устаревшие пакеты зависят от #!/usr/bin/pythonработы, я бы предпочел отправлять исправления этим программам, чем продолжать делать странные, а иногда и трудно исправляемые ошибки.
Вы можете использовать update-alternativesдля предоставления разных версий программ, которые могут понадобиться в разное время из-за проблем совместимости.
Этот ответ является хорошим примером того, как настроить, например, одновременное обслуживание разных версий gcc / g ++.
просто сделайте то же самое с python2.7 и python 3.3
Начинающие пользователи, возможно, не смогут легко адаптировать связанный ответ к другой ситуации. В дополнение к перечислению более раннего ответа, было бы хорошо изложить шаги, необходимые для Python.
python
следует понимать как значениеpython2
. Я имел в виду мой комментарий как способ получить версию Python для конкретного приложения вместо того, чтобы пытаться обойти системный Python.Ответы:
Простой безопасный способ - использовать псевдоним. Поместите это в
~/.bashrc
или~/.bash_aliases
файл:После добавления вышеуказанного в файл, запустите
source ~/.bashrc
илиsource ~/.bash_aliases
.Например:
Чтобы обойти псевдоним, используйте
command
встроенную команду:Еще один способ обойти псевдоним - использовать
\
перед командой.Чтобы отключить псевдоним в текущей оболочке, используйте
unalias
встроенную команду:источник
[Июнь 2016] Рекомендуемое место для информации о переходе - официальная страница Ubuntu Python .
Из вики Ubuntu :
Не рекомендуется менять символическую ссылку из-за других зависимостей пакетов, но у них «есть постоянные цели проекта, чтобы сделать Python 3 стандартной, предпочтительной версией Python в дистрибутивах».
Для использования CLI, как @Radu Rădeanu , я бы рекомендовал поставить псевдоним в пользователя
~/.bashrc
,.bash_aliases
файл (различные файлы, в том числе~/.bash_profile
, загружаются по крайней мере один раз, в основном для организационных целей, но может варьироваться в зависимости от платформы). Виртуальные среды Python также хорошо работают.Примеры псевдонимов:
или же
Скрипты все еще должны использовать что-то вроде
#!/usr/bin/env python3
для кросс-совместимости.Использование
env
удобно для смешанного использования с виртуальными средами.Примечание (спасибо @wjandrea): псевдонимы являются частью среды выполнения bash, а не пользовательской среды. Поэтому они не доступны для Шебанга (
#!
). Если вы предпочитаете псевдоним python = python3, то некоторые из нихprogram.py
без шебанга могут быть выполнены, вызвав такой псевдоним интерпретатора, как этотpython program.py
. Псевдоним также может быть полезен для систем с несколькими версиями python3, такими как 3.4 и 3.6, вместе.источник
python
, на самом деле не имеет значения, пока преобразование не будет завершено. Даже тогда это может стать просто проблемой.python3
в шебанге, а не в нихpython
.Обновление: я понял, что это неправильный путь, поскольку Python2 и Python3 не являются взаимозаменяемыми.
Вы можете попробовать инструмент командной строки
update-alternatives
.Если вы получаете сообщение об ошибке «нет альтернативы для python», то создайте альтернативу самостоятельно с помощью следующей команды:
Измените путь
/usr/bin/python3
к желаемой версии Python соответственно.источник
update-alternatives
он не подходит для Python? Это из-за legacy.python.org/dev/peps/pep-0394 ?sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 2
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» в терминале и «#! / Usr / bin / env python3» в файлах Python 3.x.
источник
Делать
тогда напиши либо
или же
Сохраните файл, закройте терминал и снова откройте его.
Ссылка
источник
Вы можете симлинку
/usr/bin/python
кpython3
си вы можете предотвратить установку Python 2 и pip2 в качестве зависимости с
Посмотрите другие ответы о том, почему вы не хотите этого делать. Ubuntu 18.04+ больше не поставляется с Python 2, поэтому он не должен быть слишком плохим.
источник
python
Python 2, поэтому это может сломать некоторые вещи.python
->/usr/bin/python
(если у вас есть разрешение на запись в / usr / local / bin)
тогда вы только набираете py (и используете py в #! lines) для выбранного вами питона.
источник
sudo ln -s /usr/bin/python3 /usr/local/bin/py
Я считаю очень полезным просто удалить / usr / bin / python и / usr / bin / pip. Это заставляет все программы полагаться на команды "python2" и "python3".
Хотя некоторые необязательные и устаревшие пакеты зависят от
#!/usr/bin/python
работы, я бы предпочел отправлять исправления этим программам, чем продолжать делать странные, а иногда и трудно исправляемые ошибки.источник
Вы можете использовать
update-alternatives
для предоставления разных версий программ, которые могут понадобиться в разное время из-за проблем совместимости.Этот ответ является хорошим примером того, как настроить, например, одновременное обслуживание разных версий gcc / g ++.
просто сделайте то же самое с python2.7 и python 3.3
источник