репо SyntaxError: неверный синтаксис

Я запускаю следующие команды, чтобы получить repo:

mkdir ~/bin
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
PATH=${PATH}:~/bin

У меня есть 2 версии Python (2.7 и 3.7) на моем компьютере, поэтому я создал псевдоним для python3 в ~/.bashrc, потому что это требуется для repo

alias python=python3

Затем выполните следующие команды, чтобы получить проект yocto:

repo init -u https://xxxx -b release/bxxx

Я получил эту ошибку:

File "/Path/.repo/repo/main.py", line 79
file=sys.stderr)
    ^
SyntaxError: invalid syntax

если я запускаю python3 ~/bin/repo init -u https:/blablabla, проблем нет, поэтому выполнение первой команды вызывает python2. Любое объяснение


person Mouin    schedule 08.02.2021    source источник
comment
На самом деле это не вопрос о питоне. Это связано с тем, как Linux анализирует строки shebang, которые не работают с псевдонимом, как показано в этом ответе serverfault.com/a/1050710 Файл репозитория начинается с #!/usr/bin/env python, а строка, в которой он дает сбой, представляет собой ошибочную ошибку, которая использует синтаксис python3, чтобы предупредить пользователя о том, что он использует python2. Не твоя вина, что это было непонятно!   -  person JJ Hassan    schedule 08.02.2021


Ответы (1)


Два пункта к объяснению, которое вы ищете:

  1. Ваш псевдоним не используется, когда ваша ОС ищет интерпретатор для выполнения файла репо. Он начинается со строки shebang #!/usr/bin/env python, которая может указывать на python 2.7 на вашем компьютере. Попробуйте просто написать /usr/bin/env python на своем терминале и посмотреть, какая версия консоли python запущена. См. этот ответ для предложений.
  2. Я думаю, что причина, по которой вы получаете эту синтаксическую ошибку, заключается в том, что вы действительно используете python2.7, а импорт файла репо from __future__ import print_function, похоже, не работает должным образом (что делает этот синтаксис нормальным). Хотя не уверен, почему это происходит.
person JJ Hassan    schedule 08.02.2021
comment
Как указано в сообщении об ошибке, он исходит из другого файла, в котором предположительно нет этого import. Краткий эксперимент показывает, что repo заканчивает тем, что пытается вызвать python как подпроцесс самого себя и/или exec его. - person tripleee; 09.02.2021
comment
@tripleee Хороший вопрос, я почему-то предположил, что он только что распакован из этого файла. Не могли бы вы поделиться своими экспериментами? Проверка запущенных процессов или что-то в этом роде? - person JJ Hassan; 09.02.2021
comment
Я только что попытался запустить его и получил сообщение об ошибке о том, что Python недоступен, вероятно, потому, что он каким-то образом не смог предвидеть мое использование pyenv. - person tripleee; 09.02.2021