在pyenv virtualenv上激活虚拟环境时如何导出PYTHONPATH?
我正在使用和它的插件 我的问题是:当我在pyenv virtualenv上激活一些虚拟环境时,如何修改PYTHONPATH环境变量在pyenv virtualenv上激活虚拟环境时如何导出PYTHONPATH?,python,virtualenv,pyenv,Python,Virtualenv,Pyenv,我正在使用和它的插件 我的问题是:当我在pyenv virtualenv上激活一些虚拟环境时,如何修改PYTHONPATH环境变量 $ pyenv activate myenv $ echo $PYTHONPATH # I want this variable! 当我使用简单的virtualenv时,我可以通过编辑virtualenv\u home/your\u env/bin/activate export OLD_PYTHONPATH=$PYTHONPATH export PYTHONP
$ pyenv activate myenv
$ echo $PYTHONPATH # I want this variable!
当我使用简单的virtualenv时,我可以通过编辑virtualenv\u home/your\u env/bin/activate
export OLD_PYTHONPATH=$PYTHONPATH
export PYTHONPATH="/path/to/you/want"
我应该为pyenv virtualenv编辑哪个文件?您只需按照常规设置
PYTHONPATH
,无论是在shell启动脚本中还是其他地方。当您使用pyenv virtualenv
切换到pyenv控制的virtualenv时,它将自动将此virtualenv的所有必要目录附加到sys.path
,但在PYTHONPATH
变量中定义的任何目录都将位于它们之前
$ pyenv activate myenv
$ echo $PYTHONPATH # I want this variable!
根据以下评论中的讨论添加:
您可以在$pyenv_HOME/pyenv.d/
中为给定的pyenv命令创建钩子脚本。您甚至可以对pyenv的“陶瓷”命令执行此操作,这些命令通常不会被用户直接调用
应该可以为activate
(切换到virtualenv时由pyenv virtualenv隐式调用)创建一个钩子,该钩子解析virtualenv的名称并基于该名称设置$PYTHONPATH
注意:我以前写过pyenv钩子,但没有明确测试过这个解决方案。是的,它在几乎所有情况下都能完美工作,但在一些罕见的情况下,它对我不起作用。假设我在virtualenv
env1
和env2
中有名为mod
的模块。在env1
上,我想在env1
中使用mod
,在env2
上,我想在env2
中使用mod
。这不可能吗?你能找出它不起作用的情况有什么不同吗?也许我们可以把这件事分开,弄清楚到底发生了什么……回应你编辑的评论:是的,你可以在多个VirtualNV中安装相同的模块。你不需要做任何特别的事情;您不需要编辑$PYTHONPATH。如果mod
安装在site packages
中,我不需要PYTHONPATH
。据我所知,PYTHONPATH
用于未安装的python脚本。$PYTHONPATH
用于指定解释器为模块搜索的目录列表(除了标准位置)。所以,是的。您是说您希望在env1
和env2
的两个单独的外部位置提供两个版本的模块mod
?换句话说,您想根据活动的virtualenv更改$PYTHONPATH
的值吗?