首页 文章

如何离开/退出/停用python virtualenv?

提问于
浏览
1162

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

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

但是,如何退出所有虚拟机并再次使用我的真机?现在,我回到的唯一方法

me@mymachine:~$

是退出shell并开始一个新的 . 那有点烦人 . 是否有“无所事事”的命令,如果有,那是什么?如果这样的命令不存在,我将如何创建它?

9 回答

  • 34

    我使用了基于autoenvzsh-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%s\e[0m\n" "Development tree utiles"
    workon dtree
    # eof
    dtree(feature/task24|✓); cat .autoenv_leave.zsh 
    deactivate
    

    因此,当我离开 dtree 目录时,将自动退出虚拟环境 .

  • 27

    通常,激活virtualenv会为您提供一个名为的shell函数:

    $ deactivate
    

    这让事情恢复正常 .

    编辑1

    我刚刚再次查看 virtualenvwrapper, 的代码,是的,它也支持 deactivate 作为逃避所有virtualenvs的方法 .

    编辑2

    如果您尝试离开Anaconda环境,则过程略有不同:运行双字命令 source deactivate ,因为它们使用独立脚本实现停用 .

    bash-4.3$ deactivate
    pyenv-virtualenv: deactivate must be sourced. Run 'source deactivate' instead of 'deactivate'
    bash-4.3$ source deactivate
    pyenv-virtualenv: no virtualenv has been activated.
    
  • 2

    激活python虚拟环境:

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

    停用:

    $deactivate
    
  • -3

    (my_env)basant @ basant:〜/ EonTraining / my_env $ deactivate

    使用'停用'

    巴桑特@巴桑特联想-E40-80:〜/ EonTraining / my_env $

    走了(my_env);

  • 0
    $ deactivate
    

    如果这不起作用,请尝试

    $ source deactivate
    

    任何知道bash source如何工作的人会认为这很奇怪,但围绕virtualenv的一些包装/工作流程实现为 source activate 的赞美/对应 . 因人而异

  • 0

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

    安装 virtualenvwrapper

    pip install virtualenvwrapper
    

    如果您使用的是标准shell,请打开 ~/.bashrc~/.zshrc ,如果您使用的是oh-my-zsh . 添加这两行:

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

    要激活现有的virtualenv,请使用命令workon:

    $ workon myenv
    (myenv)$
    

    为了停用你的virtualenv:

    (myenv)$ deactivate
    

    这是我的tutorial,一步一步地介绍如何安装virtualenv和virtualenvwrapper

  • -1

    在处理安装程序脚本时我自己遇到了同样的问题,我看了一下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
    
    # deactive/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

    只需在命令行上键入以下命令:

    deactivate
    
  • 1904

    我将alias workoff 定义为workon的反面:

    alias workoff='deactivate'
    

    容易记住:

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

相关问题