У меня есть сторонний сценарий, который использует хижину #!/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),
Так как 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
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