setvirtualenvproject 没有发生目录更改

Directory change not occuring with setvirtualenvproject

我正在拥抱 VirtualEnvWrapper - 并且喜欢我经常看到的东西。但是,当我尝试开始时,我没有看到我在尝试设置项目目录与虚拟环境的关联时所期望的行为。

我已经安装了 virtualenv 和 -wrapper。我可以创建环境并且 "workon" 可以很好地列出它们。我可以愉快地停用和管理它们。所以一切看起来都很实用。我阅读了有关 project mgmt. (Also a good video tutorial 的文档,并在 10:39 中解释了所需的项目关联行为)

当我尝试将工作目录与 env 相关联时,它可以很好地接受我的命令,但是当我 "workon" 项目时,它不会将我放入指定的工作目录。

例如我有一个工作区 ~/Ross_code(我在我的 .bashrc 中将其设置为 $PROJECT_HOME)。里面有一个现有的项目文件夹 ~/Ross_code/superproj

所以现在我用

创建一个环境
mkvirtualenv superp

然后我转到我现有的项目目录并将其与环境关联:

cd ~/Ross_code/superproj 
setvirtualenvproject
Setting project for superp to /Users/ross/Ross_code/superproj

然后我用 "deactivate" 退出虚拟环境并用

重新激活
workon superp

但目前的工作目录仍然是我的 ~/ 文件夹。
我检查了似乎已通过调用 setvirtualenvproject:

正确设置的 .project 文件
cdvirtualenv
more .project
/Users/ross/Ross_Code/superproj

但是调用 "workon" 从来没有让我进入预期的位置。我想也许 env 和项目目录需要同名,但这也没有任何区别。

知道为什么非常有吸引力的项目关联功能对我不起作用吗?

-罗斯。

稍后 - 更多信息: 我也尝试过使用 mkproject 命令,它应该在 $PROJECT_HOME 区域为我的代码创建一个目录,同时创建 virtualenv 并将它们相互关联。

呼叫

mkproject junkproj

实际上确实很好地创建了项目目录,并让我进入 virtualenv,然后 cd 进入 junkproj 目录。但是当我停用然后再次 "workon junkproj" 时,我仍然留在我的 ~/ 目录中,而不是进入 $PROJECT_HOME

中的项目目录

:(

workon 不会自动将目录更改为项目或环境目录。 您可以使用 postactivate 脚本执行此操作 - 在 virtualenvwrapper tips and tricks section.

的后半部分有一个非常快速的操作方法

这里的问题是 virtualenvwrapper 的较新版本(这让我从 ubuntu 14.04 升级到 16.04)对 setvirtualenvproject 参数使用了稍微不同的协议:

setvirtualenvproject [virtualenv_path project_path]

为了在任何虚拟环境中建立你想要的关联,在项目文件夹和虚拟环境中使用:

setvirtualenvproject $VIRTUAL_ENV .

圆点代表当前目录 - 或者您可以使用您希望 workon 进入的目录的路径。执行此操作后,workon 会将您切换到您想要的文件夹,并且 cdproject 将按预期工作。

如果您使用旧协议,您的项目文件夹中将有一个 .project 文件 - 您可以将其移至 $VIRTUAL_ENV 文件夹,而不用使用新协议调用命令使协会。该文件仅包含您想要与 virtualenvwrapper 快捷命令关联的项目目录,如 workoncdproject.