Я установил 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
Поэтому 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
Учитывая количество сценария, которые называют/usr/bin/env Python, ожидая python 2, это - вероятно, плохая идея иметь Python на самом деле быть python 3.
, Поскольку Benny сказал в комментарии, /usr/bin/env python3
правильное решение.
Я нашел лучшее решение, чем отправленные здесь: 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, и Вы также не должны редактировать сценарий, который Вы загрузили от кого-то еще.
Не нарушая целую систему, по моему скромному мнению, лучший подход должен создать виртуальный ENV в Вашем использовании, считают и активируют его
, зернышко/path/to/your/python3-m создает источник ~/.venv
~/.venv/bin/activate
Затем Ваш Python по умолчанию будет тем, который Вы раньше создали Венс (в пути, и т.д.)
С тем решением, you’ll также don’t, чтобы нарушили систему, когда установка нового освобождает, и won’t должны базироваться доступ.
Другие решения могли бы повлиять на устойчивость Вашей ОС
На дворе 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, у вас нет особого выбора, кроме как установить его и жить в хаосе. Если вам это не нужно, есть как минимум два общесистемных решения, которые могут облегчить вам жизнь:
python-is-python3
:$ sudo apt-get install python-is-python3
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