Заставить `#!/ Usr/bin/env python` работать на Windows

Я использую Bash на Windows, предоставленной MSYS.

Я пытался запустить файл Python с Shebang #!/usr/bin/env python, но я получаю это сообщение об ошибке:

/usr/bin/env: python: No such file or directory

Что я могу сделать, чтобы сделать эту работу?

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

7 ответов

Решение

Я оказался несоответствием между Virtualenv activate.sh файл и MSYSGIT. Он никогда не был предназначен для работы на Windows.

Вместо этого используйте правильный путь, где установлен Python, например:

#!c:/Python/python.exe

Если у вас есть Unix-подобная поддержка путей в вашей системе (я не знаком с MSYS), вы всегда можете ввести путь к вашему python исполняемый, то есть вывод which python,

Вы можете быть заинтересованы в Python Launcher для Windows

Последние версии Windows 10 поддерживают установку подсистем Linux. Если вы бежите оттуда, пути должны быть правильными.

Это должно быть рабочее решение, если вы в порядке с этим.

Корень проблемы в том, что пробелы в шебангах интерпретируются как предоставление дополнительных аргументов исполняемому файлу, поэтому C:\Program Files\Python\python.exe рассматривается как C:\Program данный Files\Python\python.exe в качестве аргумента.

Лучшее решение для этого, потому что Windows ЛЮБИТ пробелы в $HOME каталог и Program Files и другие места, даже если они действительно могут сломать файлы cmd.exe, Powershell и других инструментов, это:

Установите Python для C:\Python и добавить C:\Python папка где python.exe жизнь и Scripts каталог, который живет внутри него к вашему PATH переменная окружения на уровне системы или пользователя.

Если вам нужны Python 2.7.x и 3.x для совместной работы, установите их в C:\Python27 а также C:\Python36 а также C:\Python37 и переименовать python.exe в python2.exe, python36.exe, python37.exeи т.д. и добавьте каждую из этих папок и их Scripts папки в PATH, Вы можете определить, какая из версий Python 3 должна быть "по умолчанию", а также сделать копию в этой папке как python3.exe обрабатывать любые сценарии, которые используют !#/usr/bin/env python3,

Если в вашем домашнем каталоге пользователя есть пробел, у вас могут возникнуть проблемы, если вы используете pip install --user somepackage синтаксис. --user по умолчанию это ваш домашний каталог, и в этом случае пространство будет сбивать с толку. Обходной путь описан здесь, но сводится к экспорту PYTHONUSERBASE в вашу среду.

export PYTHONUSERBASE=/myappenv
pip install --user SomePackage

или в Windows (Powershell):

$env:PYTHONUSERBASE='C:\PythonPkgs'
pip install --user SomePackage

Хотя это не отвечает на вопрос...

Для людей, которые установили python2, затем python3 и только сейчас хотят, чтобы их программы Python3 запускались... щелкните правой кнопкой мыши => открыть с помощью => Выберите другое приложение, затем перейдите к вашему python3 python.exe

Что происходит при запуске (из оболочки):

$ /usr/bin/env python

..?

Если он запускает интерактивную сессию Python, то Python можно найти. (Вы также можете просто запустить: type python). Если он печатает "нет такого файла или каталога", то python не найден в вашем PATH. Посмотрите, можно ли настроить следующее для устранения проблемы (пробелы в пути / к /python, вероятно, вызовут проблемы):

$ export PATH=$PATH:/path/to/python
$ /usr/bin/env python
Другие вопросы по тегам