Почему Python 3 не является бинарным Python по умолчанию?


42

Я печатаю pythonв окне терминала. Я получаю Python 2.7, а не Python 3.5. Согласно документации, Python 3.5 должен быть загружен предварительно.


1
Если вы настраиваете виртуальную среду с помощью: «python3 -m venv my-venv», то с любого терминала активируйте эту виртуальную среду, вызвав «source ... / my-env / bin / activ», тогда Python 3.5 будет по умолчанию в этом терминале. Вы можете проверить текущую версию по умолчанию, вызвав "python -V".
Крейг Хикс

пока ваш ответ полезен, я спросил почему. не как. и это большая дискуссия. Вот. почему должна быть более старая версия по умолчанию, а не текущая версия.
Гивонз

1
Вы совершенно правы по поводу моего "комментария"! Вот почему я написал комментарий, а не ответ.
Крейг Хикс

Ответы:


56

Я не знаю, какие «документы» вы читаете, и что они говорят, но /usr/bin/pythonэто просто символическая ссылка на версию Python по умолчанию, в данном случае 2.7, которая является результатом простой печати pythonна терминале. Это результат PEP 394, который определяет, что

  • на данный момент все дистрибутивы должны гарантировать, что это pythonотносится к той же цели, что иpython2 .

type pythonи file /usr/bin/pythonподтвердит это.

Причиной такого расположения, отличного от соглашения, является то, что исходный пакет python-defaults в Xenial является версией 2.7.11 , поэтому символическая ссылка python указывает на эту версию.

Чтобы использовать Python 3, вы должны быть явным и вводить python3в командной строке, что рекомендуется, если вам нужна конкретная версия, это также можно сделать с помощью Python 2, набрав python2. Ubuntu включает в себя обе версии Python 2 и 3 по умолчанию во всех текущих версиях.

Есть планы перенести все на Python 3 и пометить его как значение по умолчанию.


Вероятно, это сломанный плагин rhythmbox-zeitgeist, который зависит от zeitgeiigeist-python3, но не смог его найти.
Хуршид Алам

2
Это документ, который означает OP.
SaidbakR

10

Чтобы получить Python 3.5 REPL или запустить совместимый скрипт, введите python3. Это необходимо для обеспечения совместимости со всем устаревшим Python 2.x (который всегда был и останется связанным с python).

Тир может найти , pythonесли вы создали .desktopфайл для него (в ~/.local/share/applications/), чтобы открыть терминал и запустить REPL, например. Для Python не существует среды GUI REPL по умолчанию, и нормальный интерфейс предполагает, что пользователь пойдет в терминал.

Говорят о том, что python 3.5 по умолчанию используется для сопровождения портирования всех системных скриптов с python 2.x на python 3.x, но не то, что python 3 заменит Python 2 во всех случаях.


Итак, я думаю, правильный вопрос: как мне добавить python3 в мой путь, чтобы он выполнялся автоматически?
Гивонц

ты имеешь в виду, как заставить скрипты Python работать как скомпилированная программа?
Эндрю Кич

понял, спасибо. просто введите python3 в командной строке.
Гивонз

2
AIUI, что делать с / usr / bin / python в долгосрочной перспективе, остается открытым вопросом. Для сценариев python2 лучше всего явным образом использовать python2.
Питер Грин

1
вместо использования #!/usr/bin/python3(или #!/usr/bin/python2) в скриптах, лучше использовать (специально для python), #!/usr/bin/env python3если вы хотите, чтобы он был удаленно переносимым. По большей части это просто документация, так как во многих случаях она все равно будет вызываться с использованием $ python3 your_pyprogram.py.
Майкл

4

Вы предполагаете, что Python по умолчанию должен быть доступен как python. Это предположение неверно.

В системе, которая поставляется с «предварительно загруженным» Python 3 и вообще без Python 2, будет только python3и нет python.

Код, написанный для Python 3, всегда должен искать вызываемого интерпретатора python3. Код, написанный для Python 2, будет исторически искать python.

Может наступить момент времени, возможно, десятилетия спустя, когда почти никто не помнит Python 2, когда, pythonвозможно, начнут ссылаться python3. Это было бы чисто для удобства, и может и не должно быть сделано преждевременно, если вообще! Там нет спешки, из-за следующего воздействия:

«Старые» системы не будут знать python2только о них python, поэтому имеет смысл продолжать искать код Python 2 python. Это причина, почему pythonследует ссылаться на Python 2 «пока существует код Python 2».

Новый код, написанный для Python 2, если это имеет смысл, может прекрасно выглядеть python. Он также может искать python2, если он предназначен для работы только на Python 3, хорошо осведомленных и ухоженных системах (которые должны предлагать такую ​​ссылку).

Преимущество использования кода на Python 2 python2состоит в том, что он не нуждается в дополнительных прикосновениях, как только pythonначинает ссылаться на то python3, что может никогда не произойти или когда-то pythonвообще исчезнет, ​​что может произойти или не произойти. (Это может стать реальностью, если код Python 2 исчезнет после того, как гипотетический Python 4 станет популярным у его интерпретатора python4. - Потому что позволить ему указывать либо на то, python3либо на python4оба, и это может сбить с толку.)


2

Python доступны как версии 2.x, 3.x. если вы вызываете python, как указано в python 2.x, он загрузит python 2.x

Ниже изображение поможет вам.

введите описание изображения здесь


1
как вы набираете одну и ту же команду и получаете 2 разных результата?
Гивонц

4
другой вывод от второго вызова python- от использования <tab>для запроса автозаполнения, который затем выводит возможные перестановки python*и возвращает вас в новое приглашение.
Эндрю Кич

@givonz, хм, я использовал клавишу TAB, братан. его не выводится. это возможно бинарный паттерн.
16:27

Отрицательный голос за что?
16:16

2
Я не понизил голос, но я думаю, что ответ должен объяснить, почему два первых выхода отличаются и какова роль apt-cache, особенно для начинающих пользователей Ubuntu.
AL

2

Python 3.x должен работать с 16.04 - на самом деле, он точно будет работать. У меня Ubuntu 14.04 и Python 3.4.3 - все, что вам нужно сделать, чтобы проверить его, это ввести текст, python3и он должен сказать вам, какую версию вы используете.


2
Ну, я бы не стал называть компьютерную науку ОС. И, строго говоря, Ubuntu - это ОС на базе Linux, а не на основе Unix.
magu_

мне еще предстоит понять diff bet linux & unix, кроме некоторых командных команд и других, но тесно сформулированных команд. хотя графический интерфейс намного более продвинутый, чем то, что я вижу в солярисе.
Гивонц

1
-1 Это не решает вопрос почему .
Дэвид Фёрстер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.