【问题标题】:How to export PYTHONPATH when I activate a virtual environment on pyenv-virtualenv?在 pyenv-virtualenv 上激活虚拟环境时如何导出 PYTHONPATH?
【发布时间】:2016-02-02 13:13:41
【问题描述】:

我正在使用pyenv 及其插件pyenv-virtualenv

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

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

当我使用简单的 virtualenv 时,我可以通过编辑 virtualenv_home/your_env/bin/activate 来修改 PYTHONPATH

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

我应该为 pyenv-virtualenv 编辑哪个文件?

【问题讨论】:

    标签: python virtualenv pyenv


    【解决方案1】:

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

    根据以下 cmets 中的讨论添加:

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

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

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

    【讨论】:

    • 是的,它几乎在所有情况下都能完美运行,但在极少数情况下它对我不起作用。假设我在 virtualenv env1env2 中有名为 mod 的模块。在env1 上,我想在env1 中使用mod,在env2 上,我想在env2 中使用mod。不可能吗?
    • 你能弄清楚它不起作用的情况有什么不同吗?也许我们可以把这件事分开,弄清楚发生了什么……
    • 回复您编辑的评论:是的,您可以在多个 virtualenvs 中安装相同的模块。你不需要做任何特别的事情;你不需要编辑 $PYTHONPATH。
    • 如果mod安装在site-packages中,我不需要PYTHONPATH。据我了解,PYTHONPATH用于未安装的python脚本。
    • $PYTHONPATH 用于指定解释器为模块搜索的目录列表(除了标准位置)。所以,是的。您是说您希望在env1env2 的两个独立外部位置提供模块mod 的两个版本吗?换句话说,您想根据活动的 virtualenv 改变 $PYTHONPATH 的值吗?
    猜你喜欢
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    • 2020-06-09
    • 2019-10-26
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 2022-10-17
    相关资源
    最近更新 更多