2016-02-02 113 views
0

我正在使用pyenv及其插件pyenv-virtualenv如何在pyenv-virtualenv上激活虚拟环境时导出PYTHONPATH?

我的问题是:如何在pyenv-virtualenv上激活一些虚拟环境时修改PYTHONPATH环境变量?

$ pyenv activate myenv 
$ echo $PYTHONPATH # I want this variable! 

当我用简单的virtualenv,我可以通过编辑virtualenv_home/your_env/bin/activate

export OLD_PYTHONPATH=$PYTHONPATH 
export PYTHONPATH="/path/to/you/want" 

我应该修改哪些文件pyenv-的virtualenv修改PYTHONPATH?

回答

0

您只需按照常规设置PYTHONPATH,无论这是否在您的shell启动脚本或其他地方。当您切换到一个带有pyenv virtualenv的pyenv控制的virtualenv时,它会自动将此虚拟光碟的所有必要目录附加到sys.path,但您在PYTHONPATH变量中定义的任何目录都将在它们之前。

新增基础上讨论下面的评论:

您可以创建在$PYENV_HOME/pyenv.d/<command>/给定pyenv命令<command>钩子脚本。您甚至可以为pyenv的“瓷器”命令执行此操作,而这些命令通常不会由用户直接调用。

应该可以创建用于activate一个钩(其由pyenv-的virtualenv切换到的virtualenv时隐式调用),其解析的virtualenv的名称,并基于其设定$PYTHONPATH

注意:我已经写过pyenv钩子,但没有明确测试过这个解决方案。

+0

是的,它几乎适用于所有情况,但在一些罕见的情况下,它不适用于我。假设我在virtualenv'env1'和'env2'中有名为'mod'的模块。在'env1'上,我想在'env1'和'env2'中使用'mod',我想在'env2'中使用'mod'。这是不可能的吗? – keisuke

+0

你能弄清楚它不起作用的情况有什么不同吗?也许我们可以分开这个东西,弄清楚发生了什么... – wjv

+0

回应你编辑的评论: 是的,你可以在多个virtualenvs中安装相同的模块。你不需要做任何特别的事情;你不需要编辑$ PYTHONPATH。 – wjv

相关问题