我如何让virtualenvwrapper和cygwin合作?

时间:2010-02-01 00:06:48

标签: python cygwin virtualenv

我试图让virtualenv[wrapper]通过Cygwin在我的Windows机器上运行。根据以下指示,安装成功与easy_install一起成功:http://www.doughellmann.com/docs/virtualenvwrapper/

当我使用mkvirtualenv [name_of_vir_env]时出现问题。我得到以下输出:

$ mkvirtualenv testenv
New python executable in testenv\Scripts\python.exe
Installing setuptools.................done.
bash: D:\.virtualenvs/testenv/bin/postactivate: No such file or directory
chmod: getting attributes of `D:\\.virtualenvs/testenv/bin/postactivate': No such file or directory
bash: D:\.virtualenvs/testenv/bin/predeactivate: No such file or directory
chmod: getting attributes of `D:\\.virtualenvs/testenv/bin/predeactivate': No such file or directory
bash: D:\.virtualenvs/testenv/bin/postdeactivate: No such file or directory
chmod: getting attributes of `D:\\.virtualenvs/testenv/bin/postdeactivate': No such file or directory
ERROR: Environment 'D:\.virtualenvs/testenv' does not contain an activate script.

testenv目录中,没有bin子目录,而只有LibScriptsScripts包含activate.bat,它应该用于激活此特定环境,但如果我尝试通过bash运行此操作,则会收到错误消息:

$ ./activate.bat
./activate.bat: line 1: @echo: command not found
./activate.bat: line 4: syntax error near unexpected token `('
./activate.bat: line 4: `if not defined PROMPT ('

我可以退出bash并致电activate.bat,这会改变到所需的环境。但是不在bash我不能使用workon命令或virtualenvwrapper_bashrc中的任何其他命令。

如何让两者一起工作,即留在bash,以便我可以使用virtualenvwrapper_bashrc中的命令?

4 个答案:

答案 0 :(得分:3)

我对virtualenvwrapper没有经验,但是经常使用virtualenv。我不认为activate.bat打算在cygwin下运行,它在常规Windows shell中运行时有效。我想如果你使用的是cygwin,你可能想要使用更像bin / activate(类似unix的OS版本)的东西。

bash中的cygwin环境可能与标准环境activate.bat期望运行完全不同,因此找到一个可以与bash一起使用的激活脚本(可能从unix版本中找到一个副本)可能会让你到达你可以在bash中运行你的virtualenv。

答案 1 :(得分:1)

这篇文章看起来很有希望     http://atbrox.com/2009/09/21/how-to-get-pipvirtualenvfabric-working-on-cygwin/

- 昆汀

答案 2 :(得分:1)

这对我有用:

https://bitbucket.org/cliffxuan/virtualenvwrapper-for-cygwin-windows-python

香草virtualenvwrapper似乎不支持Cygwin环境。

但需要注意的是,如果将显式传递给Scripts命令并且不使Cygwin隐式转换以python开头的路径 - 本机Windows Python无法看到这些路径。

答案 3 :(得分:0)

我不知道virtualenv,但我看到了来自cygwin的经典混合路径语法问题:

你的字符串是:

D:\.virtualenvs/testenv/bin/predeactivate

但Cygwin将反斜杠解释为“。”的转义。人物,生产:

D:.virtualenvs/testenv/bin/postactivate

在您引用的错误文本中,显然是一个格式错误的路径。检查你的实际环境变量 - 它可能是DOS / Windows路径语法,而内部部分是cygwin / unix语法。

如果是这样,请尝试使用os.path.join将两个部分拼接在一起,看看是否从中获得了一致的语法。