ОШИБКА virtualenvwrapper в GitBash

Я пытаюсь настроить virtualenvwrapper в GitBash (Windows 7). Я пишу следующие строки: 1 $ export WORKON_HOME=$HOME/.virtualenvs 2 $ export MSYS_HOME=/c/msys/1.0 3 $ source /usr/local/bin/virtualenvwrapper.sh

И последняя строка выдает ошибку: source /usr/local/bin/virtualenvwrapper.sh sh.exe: /usr/local/bin/virtualenvwrapper.sh: No such file or directory

Я нахожу, где на моем диске находится virtualenvwrapper.sh, и меняю имя каталога. На моем компьютере это /c/Python27/Scripts/virtualenvwrapper.sh. Когда я снова запускаю команду

$source /c/Python27/Scripts/virtualenvwrapper.sh

Я получаю следующее сообщение об ОШИБКЕ: sh.exe":mktemp:command not found ERROR: virtualenvwrapper could not create a temporary file name

Я проверяю свою переменную среды: C:\python27\;C:\python27\scripts\;C:\python27\scripts\virtualenvwrapper.sh\;C:\msys;C:\Program Files (x86)\Git\cmd;C:\Program Files (x86)\Git\bin\

Я не знаю, где я сделал ошибку


person Community    schedule 29.06.2014    source источник


Ответы (2)


Ошибка говорит о том, что sh.exe (оболочка) не может найти команду, соответствующую mktemp, что означает, что ее нет в GitBash, по крайней мере, не в вашем окружении.

Одним из вариантов является загрузка версии mktemp для Windows, например http://gnuwin32.sourceforge.net/packages/mktemp.htm, а затем поместите его в каталог C:\Program Files (x86)\Git\bin. . Затем оболочка должна иметь возможность сопоставить команду mktemp и продолжить работу.

person khampson    schedule 29.06.2014
comment
Я загружаю mktemp и устанавливаю его. Затем я беру из C:\Program Files(x86)\GnuWin32\bin\mktemp и помещаю в C:\Program Files (x86)\Git \бин. - person ; 30.06.2014
comment
Затем я запускаю GitBash и пишу 1 $ export WORKON_HOME=$HOME/.virtualenvs 2 $ export MSYS_HOME=/c/msys/1.0 3 $ source /c/Python27/Scripts/virtualenvwrapper.sh И последняя строка снова выдает ошибку: path = C:/Users/User/AppData/Local/Temp/virtualenvwrapper-initialize-hook-XXXXXX XXXX lpPathBuffer = C:\Users\User\AppData\Local\Temp\ szTempName = C:\Users\User\AppData\Local\Temp\tmp23A9.tmp path = C:\Users\User\AppData\Local\Temp\tmp23A9.tmp fd = 3 ERROR: virtualenvwrapper could not create a temporary file name. - person ; 30.06.2014
comment
Кажется, на самом деле он генерирует имя временного файла, но просто не может его создать. В качестве следующего шага я бы порекомендовал изучить разрешения папки Temp (и ее иерархии) в сравнении с пользователем, который запускает virtualenvwrapper. Возможно, вы можете добавить некоторый код отладки в сценарий оболочки, а также попытаться создать этот временный файл в обычной командной строке Windows, а затем также в GitBash вне virtualenvwrapper и посмотреть, работает ли он в любом из этих случаи. - person khampson; 01.07.2014
comment
Я получаю ту же ошибку. Однако указанный файл (tmpXXXX.tmp) создается, поэтому ошибка мне непонятна. Я могу создавать новые файлы как из пакетной службы Windows, так и из GitBash, например, копируя пустую строку в несуществующее имя файла. - person Lewistrick; 20.11.2014

Я нашел решение этой проблемы на компьютере с Windows 8 с помощью GitBash.

TL;DR:

Получите mktemp для windows, поместите его куда-нибудь, чтобы его мог использовать GitBash, затем отредактируйте virtualenvwrapper.sh и в строке 202 добавьте команду touch с созданным файлом. Это должно выглядеть так:

file="$(virtualenvwrapper_mktemp -t virtualenvwrapper-$suffix-XXXXXXXXXX)"
touch $file  # this is the new line
if [ $? -ne 0 ] || [ -z "$file" ] || [ ! -f "$file" ]

ПОЛНЫЙ ОТВЕТ:

Как упомянул Хэмпсон, вам нужно загрузить mktemp и поместить его в каталог Git\bin (обычно C:\Program Files (x86)\Git\bin). После этого запуск файла virtualenvwrapper.sh вызовет сообщение об ошибке:

path = C:/Users/User/AppData/Local/Temp/virtualenvwrapper-initialize-hook-XXXXXX XXXX 
lpPathBuffer = C:\Users\User\AppData\Local\Temp\ 
szTempName = C:\Users\User\AppData\Local\Temp\tmp23A9.tmp 
path = C:\Users\User\AppData\Local\Temp\tmp23A9.tmp 
fd = 3 
ERROR: virtualenvwrapper could not create a temporary file name.

В строке 202 (источник), вы видите вызов функции virtualenvwrapper_mktemp (это просто функция-оболочка для вызова mktemp), и это должно создать новый временный файл, но, по-видимому, это не так в Windows.

Просматривая руководство для mktemp в разделе примеров, вы видите, что они всегда что-то отправляют в этот новый дескриптор файла, который заставляет файл быть созданным.

Поэтому вместо того, чтобы отправлять пустую строку с помощью эха, как в руководстве, просто добавьте сенсорную команду в virtualenvwrapper.sh:

file="$(virtualenvwrapper_mktemp -t virtualenvwrapper-$suffix-XXXXXXXXXX)"
touch $file   # new command here

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

ИЗМЕНИТЬ

Я создал запрос на включение в репозиторий virtualenvwrapper, и он был одобрен. Вы можете увидеть добавленную мной сенсорную команду здесь< /а>.

person abm    schedule 15.02.2015