virtualenvwrapper:`workon` 什么时候更改到项目目录?

virtualenvwrapper: when does `workon` changes to the project directory?

我使用 virtualenvwrapper 来管理我的环境。我使用 -a <path-to-project> 参数创建我的项目,但未设置 PROJECT_HOME,因为我的项目不共享公共路径。尽管 VIRTUALENVWRAPPER_WORKON_CD 设置为 1,并且虚拟环境中存在有效的 .project 文件。

当我使用workon命令时,它只是将工作目录更改为项目的路径有时,而在其他时候,目录保持不变,尽管环境被正确激活。

那么目录何时以及如何通过 workon 发生变化?有什么我必须做/设置才能让它工作吗?

我有一个小的解决方案,虽然有点老套

  1. 转到此变量 $VIRTUALENVWRAPPER_HOOK_DIR 指向的文件夹。您可能需要在虚拟环境中才能看到该变量,但通常它具有与 $WORKON_HOME
  2. 相同的值
  3. 在此文件夹中,您应该会看到一个名为 postactivate
  4. 的脚本
  5. 将此添加为脚本的最后一行:cdproject

现在这样做的是,每次你输入workon <project_name>,这个脚本会在虚拟环境被激活后运行,你之前工作的目录会切换到那个目录项目。

有关更多生命周期挂钩,请参阅 here!

注意

我没有完全测试它以确保无论项目如何创建它都能正常工作,但为了确保它能正常工作,我建议使用 mkvirtualenv -a <env_name> 或如果环境存在并且激活了环境,请转到它的项目文件夹和 运行 setvirtualenvproject. 现在,下次您尝试执行 workon ... 时,脚本将启动进入并带你到你的项目文件夹

附录

由于这是一个 shell 脚本,您可以做一些花哨的调整,而不仅仅是那一行。例如,您可能只想在激活的项目具有特定模式或属于特定项目组的一部分时才执行某些操作。检查一些 $VIRTUALENVWRAPPER_* 变量,看看您可以获得哪些其他有用的信息

setvirtualenvproject 现在称为 setprojectdir。要使用当前目录写 setprojectdir .