用direnv激活virtualenv不会激活virtualen

2024-06-01 05:13:19 发布

您现在位置:Python中文网/ 问答频道 /正文

当我进入目录时,我使用direnv来获取我的virtualenv。在

/project
   .envrc
   /env <--- my virtualenv

.envrc公司

^{pr2}$

当我将目录改为/project时,我得到了输出:

direnv: loading .envrc
direnv: export +VIRTUAL_ENV -PS2 ~PATH

它在我的PATH环境变量前面加上env目录,所以当我运行which python和{}时,都指向我的env目录中的python和pip

=> which python
/USER/project/env/bin/python
=> which pip
/USER/project/env/bin/pip

然而,它似乎并不像我期望的那样运行source env/bin/activate。我希望它通过将virtualenv名称(env)添加到我的CLI提示符并授予对deactivate命令的访问来激活我的virtualenv,但这两种情况都不会发生。关于direnv和virtualenv的工作原理我有什么误解吗?我是python新手,所以我不确定是否有现有的工具来完成类似的工作。在


Tags: pippath目录envprojectwhichbinvirtualenv
1条回答
网友
1楼 · 发布于 2024-06-01 05:13:19

我认为首先了解direnv如何工作以形成一个正确的心智模型是很重要的;direnv不会直接在当前shell中加载.envrc。相反,它启动一个新的bashshell,执行其中的.envrc,记录环境中的更改,并将diff bash导出到当前shell中。在

这里发生的是:

virtualenv正在使用$PS1设置提示。这是一个局部变量,因此不会重新导出。direnv还过滤PS1,因为它在旧的macOS bash上未设置时会导致segfaults。在

deactivate()函数不是从bash子shell导出的,因为它不是环境变量。在

实际上,激活就像你注意到的那样有效。python的路径是正确的,运行pip或{}将在virtualenv中安装东西。不需要停用,因为当cd-离开目录时,direnv将自动卸载环境。在

要恢复自定义提示,wiki上提供了更多信息:https://github.com/direnv/direnv/wiki/Python#restoring-the-ps1

相关问题 更多 >