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

14

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

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

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

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

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

Рам Рахум
источник

Ответы:

8

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

#!c:/Python/python.exe

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

Даниэль Бек
источник
2
Или вы можете использовать env, как делает аскер.
Игнасио Васкес-Абрамс
Я не могу изменить шебанг, это часть проекта, в котором участвуют другие программисты, работающие на Linux и Mac.
Рам Рахум
@RamRachum Что выводится which envи which pythonи type python?
Даниэль Бек
0

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

$ /usr/bin/env python

..?

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

$ export PATH=$PATH:/path/to/python
$ /usr/bin/env python
Майкл
источник
0

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

Рам Рахум
источник
0

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

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

Грифон
источник
0

Корень проблемы заключается в том, что пробелы в shebangs интерпретируются как поставляя дополнительные аргументы для исполняемого файла, поэтому 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
dragon788
источник