Чому python 3 не є бінарним python за замовчуванням?


42

Я pythonнабираю вікно терміналу. Я отримую Python 2.7, а не Python 3.5. Згідно з документами, Python 3.5 повинен бути попередньо завантажений.


1
Якщо ви налаштуєте віртуальне середовище за допомогою: "python3 -m venv my-venv", то з будь-якого терміналу активуйте це віртуальне середовище, викликавши "source ... / my-env / bin / activate", тоді python 3.5 буде за замовчуванням у цьому терміналі. Ви можете перевірити поточну версію за замовчуванням, зателефонувавши "python -V".
Крейг Хікс

хоча ваша відповідь корисна, я запитав чому. не як. і це велика дискусія. тут. навіщо старіша версія за замовчуванням замість поточної версії.
givonz

1
Ви точно віритесь щодо мого "коментаря"! Тому я написав коментар, а не відповідь.
Крейг Хікс

Відповіді:


56

Я не знаю, які «документи» ви читаєте, ні те, що вони говорять, але /usr/bin/pythonце лише символічне посилання на версію python за замовчуванням, в цьому випадку 2.7, що є результатом просто набору тексту pythonна терміналі. Це результат PEP 394, який визначає це

  • на даний момент усі дистрибуції повинні гарантувати, що це pythonстосується тієї ж цілі, що іpython2 .

type pythonі file /usr/bin/pythonпідтвердить це.

Причиною такого розташування, крім конвенції, є те, що вихідний пакет python-дефолти в Xenial є версією 2.7.11 , тому символічне посилання python вказує на цю версію.

Щоб використовувати python 3, ви повинні бути явним та набрати python3в командному рядку, що рекомендується у випадку, якщо вам потрібна конкретна версія, це також можна зробити з python 2, набравши текст python2. Ubuntu включає як версії python 2, так і 3 за замовчуванням для всіх поточних версій.

Є плани перенести все на python 3 і позначити його за замовчуванням.


Це, ймовірно, зламаний плагін-ритмікс-zeitgeist, який залежить від zeitgeiigeist-python3, але не змогли його знайти.
Хуршид Алам

2
Це документ, який означає ОП.
SaidbakR

10

Щоб отримати Python 3.5 REPL або виконати сумісний сценарій, введіть python3. Це полягає в підтримці сумісності з усіма застарілими python 2.x (які завжди були і залишатимуться пов'язаними з ними python).

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

Якщо говорити про python 3.5 за замовчуванням, це те, що сервіси переносять всі системні сценарії з python 2.x на python 3.x, не те, що python 3 замінить python 2 у всіх випадках.


Отже, я думаю, правильне питання полягає в тому, як я можу додати python3 на свій шлях, щоб він виконувався автоматично?
givonz

ти маєш на увазі, як ви отримуєте сценарії python для виконання, як складена програма?
Ендрю Кіч

зрозумів дякую. просто введіть python3 в командному рядку.
givonz

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

Доступні обидві версії 2.x, 3.x Python. якщо ви викликаєте python, як він вказаний на python 2.x, він завантажить python 2.x

Нижче зображення вам допоможе.

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


1
як ви вводите одну команду і отримуєте 2 різні результати?
givonz

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

@givonz, хм, я використав ключ TAB bro. його не вихід. можливий двійковий візерунок.
rɑːdʒɑ

Негативний голос за що?
rɑːdʒɑ

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

2

Python 3.x повинен працювати з 16.04 - Насправді, він точно працюватиме. У мене є Ubuntu 14.04 і у мене є Python 3.4.3 - все, що вам потрібно зробити, щоб перевірити його, набирайте текст, python3і він повинен повідомити, яку версію ви працюєте.


2
Ну, я б не закликав використовувати інформатику з ОС. І строго кажучи: Ubuntu - це ОС на базі Linux, а не Unix.
magu_

я ще не зрозумів різну ставку linux & unix, окрім деяких командних підказок & по-різному, але чітко сформульованих команд. хоча гуй набагато досконаліший, ніж те, що я бачу в сонелі.
givonz

1
-1 Це не стосується питання, чому .
Девід Фоерстер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.