如何离开/退出/停用 Python 虚拟环境

2025-03-06 08:52:00
admin
原创
232
摘要:问题描述:我正在使用 virtualenv 和 virtualenvwrapper。我可以使用命令在 virtualenv 之间轻松切换workon。me@mymachine:~$ workon env1 (env1)me@mymachine:~$ workon env2 (env2)me@mymachine...

问题描述:

我正在使用 virtualenv 和 virtualenvwrapper。我可以使用命令在 virtualenv 之间轻松切换workon

me@mymachine:~$ workon env1
(env1)me@mymachine:~$ workon env2
(env2)me@mymachine:~$ workon env1
(env1)me@mymachine:~$ 

我如何退出所有虚拟环境并再次在系统环境中工作?目前,我唯一能返回的方法me@mymachine:~$就是退出 shell 并启动一个新 shell。这有点烦人。是否有一个命令可以处理“无”内容?如果有,它是什么?如果不存在这样的命令,我该如何创建它?


解决方案 1:

通常,激活虚拟环境会给你一个名为的 shell 函数:

$ deactivate

一切就会恢复正常。

我刚刚再次特别查看了代码virtualenvwrapper,是的,它也支持deactivate退出所有虚拟环境的方法。

如果你尝试离开Anaconda环境,命令取决于你的版本conda。较新的版本(如 4.6)会conda直接在你的 shell 中安装一个函数,在这种情况下,你可以运行:

conda deactivate

较旧的 conda 版本使用独立脚本实现停用:

source deactivate

解决方案 2:

使用:

$ deactivate 

如果这不起作用,请尝试

$ source deactivate

任何了解Bashsource工作原理的人都会认为这很奇怪,但是一些围绕 virtualenv 的包装器/工作流程将其实现为 的补充/对应部分source activate。您的里程可能会有所不同。

解决方案 3:

要激活 Python 虚拟环境:

$ cd ~/python-venv/
$ ./bin/activate

要停用:

$ deactivate

解决方案 4:

我定义了一个别名,workoff ,作为workon的对立面:

alias workoff='deactivate'

很容易记住:

[bobstein@host ~]$ workon django_project
(django_project)[bobstein@host ~]$ workoff
[bobstein@host ~]$

解决方案 5:

在 MacOs ventura 中 -

激活 -

 sudo chmod -R 755  ./venv/bin
 source venv/bin/activate    

停用 -

deactivate

解决方案 6:

运行deactivate [name of your environment]可以退出/停用您的 python 环境。

PowerShell 中使用 python3.6 Windows 10 的示例:

PS C:UserskyrlonDesktop> py -m venv env1
PS C:UserskyrlonDesktop> .env1Scriptsactivate
(env1) PS C:UserskyrlonDesktop> deactivate env1
PS C:UserskyrlonDesktop> py -m venv env1

Linux Ubuntu 20.04 LTS 桌面上使用 python3.9 的示例:

kyrlon@pc1:~$ python3 -m venv venv1
kyrlon@pc1:~$ source venv1/bin/activate
(venv1) kyrlon@pc1:~$ deactivate venv1
kyrlon@pc1:~$

解决方案 7:

我发现在 Miniconda3 环境中我必须运行:

conda deactivate

对我来说都deactivate不起作用source deactivate

解决方案 8:

使用deactivatevenvactivate脚本提供的功能需要您信任停用功能经过正确编码,以便将所有环境变量干净地重置为之前的状态 - 不仅考虑原始激活,还考虑您在此期间可能完成的任何开关配置其他工作。

这可能没什么问题,但它确实带来了一个新的、非零的风险,即事后修改你的环境。

但是,从技术上来说,进程不可能直接改变其父进程的环境变量,因此我们可以使用单独的子 shell 来绝对确保我们的venv进程不会留下任何残留更改:


激活方法:

$ bash --init-file PythonVenv/bin/activate

  • 这将在 周围启动一个新的 shell venv。您的原始bashshell 保持不变。

要停用:

$ exit[CTRL]+[D]

  • 这将退出所在的整个 shell venv,并返回到激活脚本对环境进行任何更改之前的原始 shell。


例子:

[user@computer ~]$ echo $VIRTUAL_ENV
No virtualenv!

[user@computer ~]$ bash --init-file PythonVenv/bin/activate

(PythonVenv) [user@computer ~]$ echo $VIRTUAL_ENV
/home/user/PythonVenv

(PythonVenv) [user@computer ~]$ exit
exit

[user@computer ~]$ echo $VIRTUAL_ENV
No virtualenv!

解决方案 9:

对于我的具体情况,我转到工作目录

CD /myworkingdirectory

然后我像这样激活我的环境:

my-env/scripts/activate

从同一个工作文件夹(/myworkingdirectory)中停用,我尝试了这个,但它没有任何反应:

my-env/scripts/deactivate

这确实有效:

deactivate

解决方案 10:

您可以使用virtualenvwrapper来简化您的工作方式virtualenv

安装virtualenvwrapper

pip install virtualenvwrapper

如果你使用的是标准 shell,请打开你的~/.bashrc,或者~/.zshrc如果你使用Oh My Zsh。添加以下两行:

export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

要激活现有的虚拟环境,请使用命令workon

$ workon myenv
(myenv)$

为了停用你的虚拟环境:

(myenv)$ deactivate

这是我的教程,逐步介绍如何安装 virtualenv 和 virtualenvwrapper。

解决方案 11:

$ conda deactivate

$ source deactivate

会起作用。

如果不起作用,请尝试deactivate [name of your environment]其他方法。

解决方案 12:

由于通过通常在 中查找此类命令的方式无法发现deactivate由源创建的函数,因此您可能希望创建一个仅执行该函数的命令。~/bin/activate`~/bin`deactivate

问题是,如果在 venv 之外意外执行deactivate包含单个命令的脚本,则会导致无限循环。这是一个常见的错误。deactivate

deactivate可以通过仅在函数存在(即已通过源创建activate)时执行来避免这种情况。

#!/bin/bash

declare -Ff deactivate  && deactivate

解决方案 13:

就我而言,我能够使用 激活虚拟环境env-namescriptsactivate并使用 停用它deactivate。但是,在我的 Windows PC 上运行更新后,deactivate它不再被识别为内部或外部命令。从那时起,我使用的是env-namescriptsdeactivate,这解决了问题。

解决方案 14:

我使用基于autoenv的zsh-autoenv。

zsh-autoenv自动获取(已知/白名单).autoenv.zsh文件,通常用于项目根目录。它处理“进入”和“离开”事件、嵌套和变量存储(覆盖和恢复)。

以下是一个例子:

; cd dtree 
Switching to virtual environment: Development tree utiles
;dtree(feature/task24|✓); cat .autoenv.zsh       
# Autoenv.
echo -n "Switching to virtual environment: "
printf "e[38;5;93m%se[0m
" "Development tree utiles"
workon dtree
# eof
dtree(feature/task24|✓); cat .autoenv_leave.zsh 
deactivate

所以当我离开dtree目录时,虚拟环境就会自动退出。

"Development tree utiles"只是一个名字...这里没有与光明会有任何联系的隐藏含义。

解决方案 15:

如果你不知道如何退出某些 Python 环境,我建议你运行

bash --norc

因为存在一个风险,即你忘记删除进入某些 python 环境的代码,而 conda/mamba 等程序已经安装在你的环境中。conda .bashrc/mamba 进入环境的方式与在 bash 中运行 bash 的方式相同。默认安装会强制默认激活基本环境,这让我很抓狂,因为它可能会破坏很多东西,要退出它,你只需输入

mamba deactivate

但是你可以配置 conda,让它只在你使用时激活。然后如果你输入

mamba activate env
(env)mamba activate base
(base)mamba activate base
(base)mamba activate xy

您实际上将处于嵌套环境中(xy)(xy) -deactivate-> (base) -deactivate-> (base) -deactivate-> (env) -deactivate-> no conda/mamba

因此,如果你处于某个环境中,不知道它嵌套了多少层,并且想要获取基本环境,你也可以使用

mamba activate base

解决方案 16:

我在处理安装程序脚本时遇到了同样的问题。我查看了bin/activate_this.py所做的事情,然后将其逆向。

例子:

#! /usr/bin/python
# -*- coding: utf-8 -*-
import os
import sys

# Path to virtualenv
venv_path = os.path.join('/home', 'sixdays', '.virtualenvs', 'test32')

# Save old values
old_os_path = os.environ['PATH']
old_sys_path = list(sys.path)
old_sys_prefix = sys.prefix


def deactivate():
    # Change back by setting values to starting values
    os.environ['PATH'] = old_os_path
    sys.prefix = old_sys_prefix
    sys.path[:0] = old_sys_path


# Activate the virtualenvironment
activate_this = os.path.join(venv_path, 'bin/activate_this.py')
execfile(activate_this, dict(__file__=activate_this))


# Print list of pip packages for virtualenv for example purpose
import pip
print str(pip.get_installed_distributions())

# Unload pip module
del pip

# Deactivate/switch back to initial interpreter
deactivate()

# Print list of initial environment pip packages for example purpose
import pip
print str(pip.get_installed_distributions())

我不能 100% 确定它是否按预期工作。我可能完全错过了一些东西。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   3878  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   2714  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Freshdesk、ClickUp、nTask、Hubstaff、Plutio、Productive、Targa、Bonsai、Wrike。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在项目管理过程中面临着诸多痛点,如任务分配不...
项目管理系统   47  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Monday、TeamGantt、Filestage、Chanty、Visor、Smartsheet、Productive、Quire、Planview。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多项目经理和团队在管理复杂项目时,常...
开源项目管理工具   48  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Smartsheet、GanttPRO、Backlog、Visor、ResourceGuru、Productive、Xebrio、Hive、Quire。在当今快节奏的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在选择项目管理工具时常常面临困惑:...
项目管理系统   48  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用