python 在`pipenv install`之后使用`pipenv shell`会产生“Shell for UNKNOWN_VIRTUAL_ENVIRONMENT already activated.”

dm7nw8vv  于 2023-04-28  发布在  Python
关注(0)|答案(3)|浏览(198)

当我第一次使用pipenv install package将软件包安装到虚拟环境中,然后尝试打开一个子shell在该环境中使用pipenv shell操作时,我收到以下消息:
“UNKNOWN_VIRTUAL_ENVIRONMENT的Shell已激活。未采取措施避免嵌套环境。”
但是,which python返回系统python的文件路径,这表明实际上虚拟环境没有激活。
ctr+D并调用pipenv shell,最后在虚拟环境中打开一个子shell。有人能给我解释一下这是怎么回事吗?老实说,我真的很困惑。

wmomyfyw

wmomyfyw1#

只要cd到文件夹有你的venv(.venv,Pipfile,Pipfile.锁)并运行退出。它将退出文件夹,现在你可以再次cd到同一个文件夹,并使用pipenv shell。会成功的

0x6upsns

0x6upsns2#

使用exit而不是deactivate退出shell。正如here解释的那样,“deactivate将使pipenv处于混乱状态,因为您仍然处于生成的shell示例中,而不是处于激活的virtualenv中。”
正确退出后,可以导航回目录并使用pipenv shell

raogr8fs

raogr8fs3#

我尝试了这里发布的exitdeactivate解决方案,但仍然得到消息:

Shell for UNKNOWN_VIRTUAL_ENVIRONMENT already activated.
No action taken to avoid nested environments.

这是因为在我的Windows系统上,我使用PowerShell和$PROFILE中的代码来美化控制台中的pipenv/virtualenv环境名称,如下所述:

if ($env:PIPENV_ACTIVE -eq 1) {

    function _OLD_PROMPT { "" }
    Copy-Item -Path function:prompt -Destination function:_OLD_PROMPT

    $_PROMPT_PREFIX = (($env:VIRTUAL_ENV -split "\\")[-1] -split "-")[0]
    $pipenv_name = ((($(pip -V) -split ' ')[3]) -split '\\')[4]

    function prompt {
        Write-Host -NoNewline -ForegroundColor Green "($_PROMPT_PREFIX) " 
        _OLD_PROMPT
    
    }
}

这需要将环境变量PIPENV_SHELL设置为powershell。一旦我删除了这个环境变量,从而停用了代码,我终于可以从虚拟环境中调用exit了。
我将环境变量PIPENV_SHELL设置回powershell,并且没有进一步的问题。

相关问题