【问题标题】:Set python virtualenv in vim在 vim 中设置 python virtualenv
【发布时间】:2011-04-22 08:17:11
【问题描述】:

我使用 vim 进行编码,尤其是 python 编码。通常我想用 python 解释器执行当前缓冲区。 (例如运行单元测试),通常我使用:!python % <Enter>

此场景适用于全局 python,但我想运行 virtualenv python。如何在 vim 中启用 virtualenv?是否可以在运行时切换 virtualenv?

我正在使用 macvim

【问题讨论】:

    标签: python vim virtualenv macvim


    【解决方案1】:

    这就是我使用的(抱歉,突出显示是扭曲的)。

    " Function to activate a virtualenv in the embedded interpreter for
    " omnicomplete and other things like that.
    function LoadVirtualEnv(path)
        let activate_this = a:path . '/bin/activate_this.py'
        if getftype(a:path) == "dir" && filereadable(activate_this)
            python << EOF
    import vim
    activate_this = vim.eval('l:activate_this')
    execfile(activate_this, dict(__file__=activate_this))
    EOF
        endif
    endfunction
    
    " Load up a 'stable' virtualenv if one exists in ~/.virtualenv
    let defaultvirtualenv = $HOME . "/.virtualenvs/stable"
    
    " Only attempt to load this virtualenv if the defaultvirtualenv
    " actually exists, and we aren't running with a virtualenv active.
    if has("python")
        if empty($VIRTUAL_ENV) && getftype(defaultvirtualenv) == "dir"
            call LoadVirtualEnv(defaultvirtualenv)
        endif
    endif
    

    请注意,您需要针对您用于 virtualenv 的 Python 编译 MacVim,例如如果你从 Python.org 下载了 Python 2.7,你应该使用 --with-python-config-dir=/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/config 作为 ./configure 的参数重新编译 MacVim。

    希望有帮助!

    编辑:只需注明出处:写这首小曲的许多侦探工作都是由 this blogger 完成的,他应该得到一些赞扬。

    【讨论】:

    • 哇,太棒了,这就是我要找的东西,非常感谢!我不知道 virtualenv 创建了这个 activate_this.py
    • 嗨 dwf,你能看看我的问题,看看为什么我的输出很奇怪吗? stackoverflow.com/questions/17288843/…
    • 在 Python 3 中:exec(open(activate_this).read(), { "__file__": activate_this })
    【解决方案2】:

    在启动 vim 之前激活你的 virtualenv。你会自动得到对应的解释器实例。

    【讨论】:

    • 我正在使用 MacVim,我从 Dock 启动它,所以这不是一个好的选择...据我了解,激活 virtualenv 就是修改 PATH、PYTHONHOME 和 PYTHONPATH env vars,也许还有其他一些。我不介意将 virtualenv 的激活 script 移植到 vim,我只是想知道是否有现有的解决方案。
    • 如果 virtualenv python 与 vim 编译的版本不同(例如 2 vs 3),我发现这不起作用
    【解决方案3】:

    github上还有一个vim插件:

    https://github.com/jmcantrell/vim-virtualenv

    我没试过,不过好像也能解决问题。

    【讨论】:

    • 我已经尝试过了,但它似乎不适用于 Mac OSX 10.8 (Mountain Lion) -- 可能存在其他一些潜在问题
    • @Chris:这很可能是因为this issue
    【解决方案4】:

    您可以为 vim 创建一个具有别名的函数,以自动加载/卸载 virtualenv(如果它存在于您启动它的位置)。

    在本例中,它检查 .venv/bin/activate 中的 virtualenv。

    vimVenAutoload() {
        if [ -e .venv/bin/activate ]; then
            . .venv/bin/activate;
            vim $*;
            deactivate;
        else
            vim $*;
        fi;
    }
    alias vim="vimVenAutoload"
    

    您可以将此添加到您的.bashrc.bash_profile

    小警告:如果 virtualenv 已经加载,它将被新的覆盖。

    【讨论】:

      【解决方案5】:

      这个问题其实困扰了我很久,直到我使用了vim-conda的插件。只需在 ~/.vimrc 中添加插件 'cjrh/vim-conda' 即可。也可以看详细说明https://github.com/cjrh/vim-conda

      【讨论】:

        【解决方案6】:

        如果由于某些原因您不想在 python 虚拟环境中运行vim,那么您可以:而不是采购venv/bin/activate

        PYTHONPATH="$(source venv/bin/activate; python3 -c "import sys; print(':'.join(sys.path))"; deactivate)" vim
        

        这也是虚拟环境的来源,但它在某种程度上与运行vim 的环境分开。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-08-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-11
          • 1970-01-01
          • 2017-10-21
          相关资源
          最近更新 更多