GitBash中的错误virtualenvwrapper

时间:2014-06-29 17:43:00

标签: python git bash virtualenv virtualenvwrapper

我试图在GitBash(Windows 7)中设置virtualenvwrapper。我写下一行: 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

我收到下一条ERROR消息: 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\

我不知道我犯了什么错误

2 个答案:

答案 0 :(得分:1)

错误是 sh.exe (shell)无法找到匹配 mktemp 的命令,这意味着它不存在于 GitBash ,至少不在您的环境中。

一个选项是您可以下载 Windows 版本的 mktemp ,例如http://gnuwin32.sourceforge.net/packages/mktemp.htm,然后将其放在 C:\ Program Files中(x86)\ Git \ bin 目录。然后shell应该能够匹配 mktemp 命令并且能够继续。

答案 1 :(得分:1)

我在使用GitBash的Windows 8计算机上找到了解决此问题的方法。

TL; DR:

获取Windows的mktemp,将其放在GitBash可以使用的地方,然后编辑virtualenvwrapper.sh,并在第202行添加触摸命令并创建文件。它应该是这样的:

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

完整的答案:

正如khampson所提到的,你必须下载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行(source),你看到对virtualenvwrapper_mktemp(它只是一个调用mktemp的包装函数)的函数调用,这应该是创建新的临时文件,但显然它没有'在窗户上。

通过mktemp的手册,在示例部分,您会看到他们总是向新文件句柄发送内容,强制创建文件。

因此,不要像手册那样使用echo发送空字符串,只需向 virtualenvwrapper.sh 添加触摸命令:

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

这应该强制窗口创建临时文件。由于低代表我无法发布其余的链接,但我希望这仍然有助于某人。

修改

我在virtualenvwrapper repo上创建了一个pull请求,它已被批准。您可以看到我建议添加here的触摸命令。