запущенный скрипт Python помещен в PATH (cygwin) - PullRequest
0 голосов
/ 09 мая 2019

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

Я использую Шебанг

#!/usr/bin/env python

, который отлично работает на Linux-машине.

Тем не менее, вызывая следующую строку из windows cygwin, я получаю сообщение об ошибке:

$ my_script.py some arguments
C:\app\Python36\python.exe: can't open file '/cygdrive/d/11_scripts/my_script.py': [Errno 2] No such file or directory

Проблема вызвана тем, что cygwin расширяет путь к сценарию, а python не понимает способ подключенных дисков cygwin: / cygwin / d / ... Когда я запускаю скрипт с полным путем (в формате win) или по относительному пути, он работает.

$ d:/11_scripts/my_script.py some arguments

Знаете ли вы о каком-нибудь обходном пути? Подобная проблема обсуждается здесь: Проблемы при запуске скрипта Python через Cygwin Но я хочу использовать ПУТЬ.

Спасибо!

Сложение: на данный момент я использую скрипт bash wrapper, который вставлен в PATH:

#!/usr/bin/bash
pypath='/cygdrive/c/app/Python36/python'

$pypath -u 'd:\11_scripts\my_script.py' $@

1 Ответ

0 голосов
/ 09 мая 2019

Вы используете

C:\app\Python36\python.exe

, который является некоторым собственным Python для Windows, а не Python от Cygwin, скомпилированный для использования Cygwin.Поэтому, естественно, он не имеет ни малейшего представления о путях Cygwin.

Если вы хотите использовать Python от Cygwin, лучшим вариантом будет просто использовать Python, поставляемый с Cygwin.

Если вы абсолютно должен использовать собственный Python для Windows от Cygwin (вы можете сделать это, и у меня иногда была причина, например, для тестирования кода, предназначенного для запуска на Python для Windows, в котором, например, используется модуль msvcrt), вы можете это сделать,Но вам все равно нужно преобразовать любые пути файловой системы в собственный путь Windows.В Cygwin вы можете сделать это с помощью команды cygpath , например

$ cygpath -w -a /cygdrive/d/whatever
D:\whatever

Обернуть любые пути к файлам, передаваемые в Python, как

$ C:/Python36/python.exe "$(cygpath -w -a /cygdrive/d/whatever)"

Если вам нужно делать это частоВы можете сделать скрипт-обертку.

...