可以将现有文件夹重新声明为虚拟环境吗?

时间:2014-03-13 11:46:34

标签: virtualenv virtualenvwrapper

不确定我是否以正确的方式提出这个问题,但基本上我希望“重新声明”或“恢复”在VirtualEnvWrapper中创建的虚拟环境。

我最初创建了虚拟环境,当我发出workon命令时,我能够看到它。但是,由于我正在使用文件结构(我希望将所有Python文件移动到名为Python的文件夹中,并将我的Bootstrap文件移动到名为Static的文件夹中),所以不再出现带有workon命令的环境

我考虑过将bin文件夹等移回顶层会修复它,但似乎并非如此。

1 个答案:

答案 0 :(得分:0)

virtualenvwrapper剖析

现有项目分为两部分:

  • virtualenv,其中安装了python和python库,
  • 代码所在的项目目录(使用virtualenv)。

Virtualenvwrapper增加了第三部分,virtualenvwrapper钩子。这些主要是在项目或virtualenvs生命周期中的某些时间调用的shell函数。它们位于第三个目录中 - 默认情况下,它们被安装到〜/ .virtualenvs(至少在我的Debian系统上是这样)。钩子包括postactivate,我们将在下面编辑,以及其他一些如premkproject,premkvirtualenv等。以下关键字列表为您提供钩子的味道:初始化,前/后,mk / rm,项目/ virtualenv ,激活/停用。 virtualenvwrapper将这些脚本放在$ VIRTUALENVWRAPPER_HOOK_DIR中,默认为$ WORKON_HOME。

virtualenvwrapper假设

  • 所有的virtualenv都在一个地方($ WORKON_HOME)(默认为〜/ .virtualenvs) 假设你有两个版本,一个名为MYVENV,另一个名为MYOTHERVENV
  • 所有项目目录都在另一个地方($ PROJECT_HOME)。 假设你在目录/ home / me / where / my / proj中有一个使用virtualenv MYVENV的项目“is”。

如何使用workon处理预先存在的代码和virtualenv

这里我假设你所有的virtualenv都在一个地方(在我的情况下,它们都在/ usr / local / virtualenv)。

一次性操作

编辑〜/ .virtualenvs / postactivate

    case $env_name in
        MYVENV)
            cd /home/me/where/my/proj/is
            ;;
        MYOTHERVENV)
            cd /home/me/where/my/other/project/is2
            ;;
    esac

链接

    for hk in get_env_details initialize postactivate postdeactivate \
            postmkproject postmkvirtualenv postrmproject postrmvirtualenv \
            preactivate predeactivate premkproject premkvirtualenv \
            prermproject prermvirtualenv; do \
        ln -s ~/.virtualenvs/$hk /usr/local/pythonenv/$hk; \
    done

任何时候您想要使用MYVENV virtualenv

的项目
    WORKON_HOME=/usr/local/pythonenv workon MYVENV

当然,如果你所有的virtualenv确实在同一个地方,你可以在你的.profile中定义WORKON_HOME,你不必每次都在命令行上指定它。