Значение по умолчанию к python3 для '/usr/bin/env Python'

Я установил python2.7, и pyhton3.5 с Кв. - добираются.
В моем .bashrc я имею alias python=python3 сделать python3 значением по умолчанию. Это работает, если я просто запускаю Python непосредственно, но это, кажется, не работает с/usr/bin/env.

Как я могу вызвать python3 в этом случае?

$ python --version
Python 3.5.2
$ /usr/bin/env python --version
Python 2.7.12
7
задан 26 August 2016 в 13:19

5 ответов

Поэтому env ищет python в Вашем PATH, не на любой встроенной оболочке, или псевдоним или функция. Поскольку Вы определили python как python3 как псевдоним, env не найдет его, это перероет PATH и решит python кому: /usr/bin/python (который является python2).

Можно проверить все доступные местоположения исполняемого файла python, в bash, сделайте:

type -a python

Вам не повезло, если Вы хотите использовать псевдоним в хижине как по определению, хижина должна быть полным путем к исполняемому файлу интерпретатора, который env должен решить python для того, когда Вы используете /usr/bin/env python. Интерпретировать использование сценария python3 используйте хижину:

#!/usr/bin/env python3
9
ответ дан 23 November 2019 в 06:23

Учитывая количество сценария, которые называют/usr/bin/env Python, ожидая python 2, это - вероятно, плохая идея иметь Python на самом деле быть python 3.

, Поскольку Benny сказал в комментарии, /usr/bin/env python3 правильное решение.

2
ответ дан 23 November 2019 в 06:23

Я нашел лучшее решение, чем отправленные здесь: http://redsymbol.net/articles/env-and-python-scripts-version/

основная идея состоит в том, чтобы поместить Python имени символьной ссылки в python3 в некотором другом энергично именованном каталоге и затем поместить тот каталог в начале $PATH, таким образом, это найдено перед тем в/usr/bin.

Так:

mkdir ~/bin/env_python3/
ln -s /usr/bin/python3 ~/bin/env_python3/python
$PATH = ~/bin/env_python3/:$PATH ./script.py

Используя это решение Вы не делаете символьной ссылки/usr/bin/python к python3 и повреждаете сценарии, которые предполагают, что это - python 2, и Вы также не должны редактировать сценарий, который Вы загрузили от кого-то еще.

0
ответ дан 23 November 2019 в 06:23

Не нарушая целую систему, по моему скромному мнению, лучший подход должен создать виртуальный ENV в Вашем использовании, считают и активируют его

, зернышко/path/to/your/python3-m создает источник ~/.venv

~/.venv/bin/activate

Затем Ваш Python по умолчанию будет тем, который Вы раньше создали Венс (в пути, и т.д.)

С тем решением, you’ll также don’t, чтобы нарушили систему, когда установка нового освобождает, и won’t должны базироваться доступ.

Другие решения могли бы повлиять на устойчивость Вашей ОС

0
ответ дан 23 November 2019 в 06:23

На дворе 2020 год, и многое изменилось:

Из Focal Fossa примечаний к выпуску:

Python3 по умолчанию

В версии 20.04 LTS python включен в базовую систему это питон 3.8. Python 2.7 перемещен в юниверс и по умолчанию не включен ни в одну новую установку.

Остальные пакеты в Ubuntu, для которых требуется Python 2.7, были обновлены, чтобы использовать /usr/bin/python2 в качестве их интерпретатора, а /usr/bin/python по умолчанию отсутствует в любых новых установках. и т. д. и т. д.

К сожалению, насколько мне известно, это изменение в дистрибутиве Ubuntu 20.04LTS могло быть сделано не так хорошо, как могло бы. Некоторые приложения явно не поддерживают это изменение и просто не будут работать без посторонней помощи.

Если вам нужен Python2, у вас нет особого выбора, кроме как установить его и жить в хаосе. Если вам это не нужно, есть как минимум два общесистемных решения, которые могут облегчить вам жизнь:

1. Установите python-is-python3:

$ sudo apt-get install python-is-python3

2. Примените update-alternatives

$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10
update-alternatives: using /usr/bin/python3 to provide /usr/bin/python (python) in auto mode
2
ответ дан 29 November 2020 в 23:54

Другие вопросы по тегам:

Похожие вопросы: