当我进入目录时,我使用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新手,所以我不确定是否有现有的工具来完成类似的工作。在
我认为首先了解direnv如何工作以形成一个正确的心智模型是很重要的;direnv不会直接在当前shell中加载
.envrc
。相反,它启动一个新的bashshell,执行其中的.envrc
,记录环境中的更改,并将diff bash导出到当前shell中。在这里发生的是:
virtualenv正在使用
$PS1
设置提示。这是一个局部变量,因此不会重新导出。direnv
还过滤PS1
,因为它在旧的macOS bash上未设置时会导致segfaults。在deactivate()
函数不是从bash子shell导出的,因为它不是环境变量。在实际上,激活就像你注意到的那样有效。python的路径是正确的,运行}将在virtualenv中安装东西。不需要停用,因为当
pip
或{cd
-离开目录时,direnv将自动卸载环境。在要恢复自定义提示,wiki上提供了更多信息:https://github.com/direnv/direnv/wiki/Python#restoring-the-ps1
相关问题 更多 >
编程相关推荐