【问题标题】:Can an existing folder be re-declared a virtual environment?可以将现有文件夹重新声明为虚拟环境吗?
【发布时间】:2014-03-13 11:46:34
【问题描述】:

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

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

不再显示环境

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

【问题讨论】:

    标签: virtualenv virtualenvwrapper


    【解决方案1】:

    是的。

    virtualenvwrapper 剖析

    现有项目有两部分:

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

    Virtualenvwrapper 添加了第三部分,virtualenvwrapper 钩子。这些主要是在项目或 virtualenvs 生命周期中的特定时间调用的 shell 函数。它们位于第三个目录中——默认情况下,它们安装到 ~/.virtualenvs(至少在我的 Debian 系统上是这样)。这些钩子包括我们将在下面编辑的 postactivate,以及一些其他的,例如 premkproject、premkvirtualenv 等。以下关键字列表为您提供了钩子的风格:initialize、pre/post、mk/rm、project/virtualenv , 激活/停用。 virtualenvwrapper 将这些脚本放在 $VIRTUALENVWRAPPER_HOOK_DIR 中,默认为 $WORKON_HOME。

    virtualenvwrapper 假设

    • 所有 virtualenvs 都在一个地方 ($WORKON_HOME) (默认为 ~/.virtualenvs) 假设您有两个虚拟环境,一个称为 MYVENV,另一个称为 MYOTHERVENV
    • 所有项目目录都在另一个地方($PROJECT_HOME)。 假设您在目录 /home/me/where/my/proj 中有一个使用 virtualenv MYVENV 的项目“is”。

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

    这里我假设你所有的 virtualenvs 都在一个地方(在我的例子中,它们都在 /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
    

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

    【讨论】:

      猜你喜欢
      • 2021-12-10
      • 2011-04-08
      • 1970-01-01
      • 2022-10-08
      • 1970-01-01
      • 1970-01-01
      • 2019-12-26
      • 2019-05-02
      • 1970-01-01
      相关资源
      最近更新 更多