【问题标题】:ERROR virtualenvwrapper in GitBashGitBash中的错误virtualenvwrapper
【发布时间】:2014-06-29 17:43:00
【问题描述】:

我试图在 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

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

我不知道我在哪里做错了

【问题讨论】:

    标签: python git bash virtualenv virtualenvwrapper


    【解决方案1】:

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

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

    【讨论】:

    • 我下载 mktemp 并安装它。然后我从 C:\Program Files(x86)\GnuWin32\bin\mktemp 把它放在 C: \Program Files (x86)\Git\bin.
    • 然后我运行 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.
    • 它似乎实际上正在生成临时文件名,它只是无法创建它。作为下一步,我建议查看 Temp 文件夹(及其层次结构)与运行 virtualenvwrapper 的用户的权限。您也许可以将一些调试代码添加到 shell 脚本中,并尝试在常规 Windows 命令提示符中创建该临时文件,然后在 virtualenvwrapper 之外的 GitBash 中创建该临时文件,看看它是否适用于其中任何一个案例。
    • 我得到同样的错误。虽然创建了上述文件(tmpXXXX.tmp),所以我不清楚错误。我可以从 Windows Batch 和 GitBash 创建新文件,例如通过将空字符串复制到不存在的文件名。
    【解决方案2】:

    我在使用 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 的包装函数),这应该创建新的临时文件,但显然它不在 Windows 上。

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

    所以不要像手册那样使用 echo 发送一个空字符串,只需在 virtualenvwrapper.sh 中添加一个触摸命令:

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

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

    编辑

    我在 virtualenvwrapper 存储库上创建了一个拉取请求,并获得了批准。你可以看到我建议添加的触摸命令here

    【讨论】:

      猜你喜欢
      • 2018-12-03
      • 1970-01-01
      • 1970-01-01
      • 2013-10-08
      • 2018-08-27
      • 1970-01-01
      • 2017-09-25
      • 2017-11-06
      • 1970-01-01
      相关资源
      最近更新 更多