Как заставить хижину Python использовать python3?

У меня есть сторонний сценарий, который использует хижину #!/usr/bin/env python.

Согласно документации Python, это - правильная форма для сценариев, которые подходят и для Python v2 и для Python v3 (https://docs.python.org/3/using/windows.html#shebang-lines).

Моя Ubuntu (WSL) имеет только установленный Python 3:

~❯ which python
~❯ which python3
/usr/bin/python3

Я добавил это к пути путем включения следующего мой ~/.bashrc и определение источника его

export PATH=/usr/bin/python3:${PATH}
export PY_PYTHON=3  # also added this for good measure, but no joy
~❯ . ~/.bashrc
~❯ env | grep PATH
PATH=/home/me/.local/bin:/home/me/bin:/usr/bin/python3:/opt/gradle/gradle-5.3.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

Все же, когда я запускаю этот скрипт, он жалуется, что не может найти Python. Я создал короткий тестовый файл foo это содержит ту же хижину и a print("Hello"):

~❯ ./foo
/usr/bin/env: ‘python’: No such file or directory

Что еще может я делать для создания env использовать python3?

PS: у Меня нет python 2, и при этом я не хочу устанавливать его. Сторонний README сценария конкретно упоминает, что поддерживал и Python v2 и v3, и хижина указывает на это, как упомянуто, согласно самим документам Python.

PPS: Добавление псевдонимов не разрешает это, поскольку они являются только эффективными, когда пользователь называет Python при подсказке, не, когда сам удар запускает скрипт. Этот ответ на подобный вопрос явно цитирует это поведение: https://askubuntu.com/a/351380/333103

PPPS: полученная мудрость от других вопросов - то, что symlinking не является правильным решением env проблемы (не имеют ссылки для вручения просто ATM),

1
задан 16 November 2019 в 23:09

2 ответа

Так как OP не устанавливает python2 и не нуждается в/usr/bin/python как python2, я удивлен, что никто не упомянул большую часть простого решения.

Вы просто Python символьной ссылки к python3 с sudo ln -s python3 /usr/bin/python, и это будет работать.

Или, сконфигурируйте альтернативы, как упомянуто в комментарии (3.6 при использовании Ubuntu 18.04 на WSL):

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 100
3
ответ дан 3 December 2019 в 07:19

env не может найти Python, потому что ENV ищет Python в Вашем PATH, не на любой встроенной оболочке, или псевдоним или функция. Поскольку Вы определили Python как использование EXPORT, ENV не найдет его, это перероет 'ПУТЬ' и разрешит Python к/usr/bin/python (который является python2 и не существующий в системе).

можно проверить все доступные местоположения исполняемого Python, в ударе, сделать:

type -a python

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

#!/usr/bin/env python3
0
ответ дан 3 December 2019 в 07:19

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

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