Виртуальная среда фляги: плохой интерпретатор: нет такого файла или каталога

-4

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

#!flask/bin/python

Когда я пытаюсь выполнить мой скрипт из командной строки, я получаю следующую ошибку:

-bash: ./run.py: flask/bin/python^M: bad interpreter: No such file or directory

Я знаю, что это означает, что интерпретатор python не может быть найден, но если я перейду в флягу /bin, я смогу увидеть интерпретатор внутри. Это все файлы внутри фляжки/корзины

активировать
activate.csh
activate.fish
activate_this.py
easy_install
easy_install-2.7
зернышко
PIP2
pip2.7
питон
питон-конфигурации
python2 → python
python2.7 → python
рулевое колесо

Я попытался удалить каталог виртуальной среды и создать его снова, но это не помогло.

Почему мой shebang не работает в этом случае?

спросил(а) 2017-09-12T14:53:00+03:00 3 года, 1 месяц назад
0
81

Вы пишете сценарий в среде Windows, а затем переместите его в среду UNIX? Поскольку окончания строк разные, файлы, написанные в одной среде, не будут работать автоматически с другой. См. Здесь для получения дополнительной информации.

Чтобы решить эту проблему, попробуйте использовать dos2unix, или если вы используете что-то вроде Notepad++ в Windows, часто есть варианты сохранения файла в формате Windows.

ответил(а) 2017-09-12T15:03:00+03:00 3 года, 1 месяц назад
42

-bash: ./run.py: flask/bin/python^M: bad interpreter: No such file or directory

Баш игнорирует линию shebang (это комментарий к bash). Линия shebang вместо этого обрабатывается программным загрузчиком Unix. Если первые два символа исполняемого файла: #! , загрузчик программ

    Сканирование вперед для нового символа линии, вплоть до системного предела. С Linux это ограничение составляет 127 символов. Усекает конечные пробелы с конца строки. Код ядра Linux для этого - строки с 46 по 56 binfmt_script.c. Возврат каретки не является пробелом в этом контексте. Ищет имя интерпретатора, начиная с первого символа без пробелов после ведущего #! , Пытается выполнить именованный интерпретатор с именем сценария в качестве аргумента.

Короче говоря, загрузчик программ ищет файл с именем python^M а не python в flask/bin. Этот файл не существует.

Непосредственное решение - запустить dos2unix против вашего скрипта. Более долгосрочное решение - не использовать инструменты Windows для создания файлов, предназначенных для Unix-машины.

ответил(а) 2017-09-12T15:02:00+03:00 3 года, 1 месяц назад
-4

flask/bin/python ^ M, это потому, что ваш файл был написан в окнах и выполнен в unix?

ответил(а) 2017-09-12T14:58:00+03:00 3 года, 1 месяц назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема