Проблема пути к Fabfile в Windows

Я пытаюсь развернуть свой сайт с помощью Fabric и Mercurial. В командной строке Windows запуск hg push работает без проблем.

Но когда я пытаюсь написать

local("hg push")

в fabfile и запуская его, я получаю сообщение об ошибке:

'"hg push"' is not recognized as an internal or external command, operable program or batch file. 

Поиск в Google дал мне идею, что это может быть проблема с переменной PATH в подпроцессах Python, например здесь: Почему ошибка «команда не распознана» возникает только при заполнении окна?.

Можете ли вы помочь мне? Ошибка в Fabric или в моем собственном коде?

Спасибо.


person Kevin Burke    schedule 02.05.2011    source источник
comment
В настоящее время Fabric плохо поддерживается в Windows, поэтому я не удивлен, увидев, что это происходит. Если вы включите некоторые дополнительные детали, это может быть лучше; добавьте ведение журнала отладки с помощью show('everything', 'debug'): и включите содержимое вашего PATH. Кроме того, включите все настройки «env», которые у вас есть на данный момент.   -  person Chris R    schedule 02.05.2011
comment
Крис Р.: Я до сих пор не уверен, в чем проблема. Помещение всего внутрь show('everything','debug') не дало больше информации о проблеме. Я попытался установить env.path напрямую и получил странные результаты, как указано ниже. Изменение local() на os.system() устранило проблему, особенно для такой простой команды, как hg push.   -  person Kevin Burke    schedule 04.05.2011


Ответы (3)


Как упоминает Крис Р., мы не делаем тонны поддержки Windows, поскольку ни один из основных разработчиков не является пользователем Windows; нам приходится полагаться на отчеты и предложения наших более опытных пользователей Windows.

Похоже, это может быть связано с этой недавно исправленной, но не выпущенной ошибкой -- это будет в Fabric 1.0.2, которая должна выйти в ближайшее время. Если вы чувствуете себя смелым, вы можете проверить это прямо сейчас через:

pip install -e git+git://github.com/bitprophet/[email protected]#egg=Fabric

Если вы затем сделаете fab -V, это должно сказать, что это 1.0.2a - если это так, запуск вашего fabfile может работать лучше. Пожалуйста, дайте нам знать, если вы это сделаете!

person bitprophet    schedule 02.05.2011
comment
Изменение local() на os.system() устранило проблему, особенно для такой простой команды, как hg push. Пожалуйста, дайте мне знать, если вы хотите, чтобы я отправил отчет об ошибке. - person Kevin Burke; 04.05.2011
comment
У меня сработало обновление до 1.0.2a, как описано выше. С Fabric 1.0.1 local('echo %PATH%') в Windows произошел сбой с сообщением об ошибке о неправильном имени файла. С Fabric 1.0.2a та же команда работала, как и ожидалось. - person Andi Albrecht; 23.05.2011
comment
У меня 2.4.0, и я все еще получаю эту ошибку. Кроме того, у меня проблемы с ключами SSH, которые плохо работают с Fabric, но нормально работают с терминала. Ошибка связана с тем, что базовый SSH-клиент не может распознать ключи. - person TheRealChx101; 27.04.2019


Ни одно из предоставленных исправлений не сработало, но изменение

local("hg push")

to

os.system("hg push")

решил проблему.

person Kevin Burke    schedule 16.05.2011
comment
Как новичок в Fabric, было бы неплохо узнать, почему за это проголосовали без комментариев? что не так с использованием os.system здесь? - person jowan sebastian; 18.04.2015
comment
@jowansebastian Потому что использовать system — плохая практика. К тому же это неподконтрольно Фабрике. В любом случае, это отстой для разработчиков Windows, потому что он все еще не работает на 2.4.0. - person TheRealChx101; 27.04.2019