Скрипт не может найти Python3

Я пытаюсь немного изучить Python3, поэтому обо всем по порядку: Hello World. Но как бы просто это ни было, я ужасно провожу время со строкой 1, ссылкой на Shebang. Я создаю следующий скрипт на своем ноутбуке под управлением Mac Os 10.15.3

#!/usr/bin/env python3
print('Hello World')

Я сохраняю его как python_test-01.py, делаю скрипт исполняемым и пытаюсь запустить его.

Emonda:Scripts paul$ chmod 755 python_test-01.py 
Emonda:Scripts paul$ ls -l

-rwxr-xr-x@ 1 paul  staff   47 Mar  5 13:07 python_test-01.py

Emonda:Scripts paul$ ./python_test-01.py 
./python_test-01.py: line 1: #!/usr/bin/env: No such file or directory
./python_test-01.py: line 2: syntax error near unexpected token `'Hello World''
./python_test-01.py: line 2: `print('Hello World')'

Хм. Не могу найти env. Хорошо, я буду использовать прямой путь в строке shebang вместо env. Я редактирую сценарий, чтобы прочитать

#!/usr/bin/python3
print('Hello World')

и запустить это

Emonda:Scripts paul$ ./python_test-01.py 
./python_test-01.py: line 1: #!/usr/bin/python3: No such file or directory
./python_test-01.py: line 2: syntax error near unexpected token `'Hello World''
./python_test-01.py: line 2: `print('Hello World')'

Теперь он тоже не может найти Python3. Поэтому я оглядываюсь, чтобы убедиться, что у меня действительно установлены env и python3 и где они находятся.

Emonda:Scripts paul$ cd /usr/bin/
Emonda:bin paul$ pwd
/usr/bin
Emonda:bin paul$ whereis env
/usr/bin/env
Emonda:bin paul$ whereis python3
/usr/bin/python3

Да, вот они, прямо там, где я сказал, что они будут в линии Шебанг. / usr / bin /

Вторая глава

Повторяя это снова и снова, я решаю попробовать что-нибудь другое. Я подключился к своему Raspberry Pi, работающему под управлением Debian GNU / Linux. Замечу, что у него тоже есть версия Python3, установленная в каталоге / usr / bin /. Я использую vim для написания того же двухстрочного скрипта, начинающегося с одного и того же шебанга: #! / Usr / bin / python3. Chmod 755. «Привет, мир». Работает с первой попытки.

В чем разница между этими двумя системами? В Raspberry Pi все работало как положено. Что случилось с Mac? Где мне искать на Mac, чтобы найти причину, по которой интерпретатор не может найти Python3?

Спасибо старости за то, что повесился со мной, Пол


person Paul Gobble    schedule 05.03.2020    source источник
comment
Работает ли python3 ./python_test-01.py?   -  person Ed Ward    schedule 05.03.2020
comment
Если вы новичок в Python, не беспокойтесь о shebang. Вы всегда можете запустить свой сценарий, используя python my_script.py.   -  person Jan Kislinger    schedule 05.03.2020
comment
@Ed Ward, да, это работает, но моя цель - иметь возможность запускать этот скрипт из приложения SQLite, в котором есть меню скриптов, поэтому я не могу полагаться на предисловие к командной строке.   -  person Paul Gobble    schedule 05.03.2020
comment
Возможно, вы использовали Textedit для создания сценария? Если это так, не забудьте выбрать параметр меню Format, а затем Make Plain Text перед сохранением.   -  person Mark Setchell    schedule 07.03.2020
comment
Еще одна проблема: #!/usr/bin/env pythonX не работает при запуске из меню сценария, если pythonX установлен через MacPorts. Может также повлиять на другие типы установок. env нормально работает со встроенным питоном.   -  person Mat Gessel    schedule 30.01.2021


Ответы (1)


После всего этого и всего вашего замечательного вклада выясняется, что файл сценария в системе MacOs был сохранен в кодировке UTF-8 с BOM. Этого было достаточно, чтобы первая строка сценария, Шебанг, стала неразборчивой для переводчика. После сохранения файла в кодировке UTF-8 без спецификации, он работал, как ожидалось.

person Paul Gobble    schedule 07.03.2020