How to leave/exit/deactivate a Python virtualenv

前端 未结 13 1477
春和景丽
春和景丽 2020-11-27 08:42

I\'m using virtualenv and the virtualenvwrapper. I can switch between virtualenv\'s just fine using the workon command.

me@mymachine:~$ workon          


        
相关标签:
13条回答
  • 2020-11-27 09:22

    To activate a Python virtual environment:

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

    To deactivate:

    $deactivate
    
    0 讨论(0)
  • 2020-11-27 09:27

    You can use virtualenvwrapper in order to ease the way you work with virtualenv.

    Installing virtualenvwrapper:

    pip install virtualenvwrapper
    

    If you are using a standard shell, open your ~/.bashrc or ~/.zshrc if you use Oh My Zsh. Add these two lines:

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

    To activate an existing virtualenv, use command workon:

    $ workon myenv
    (myenv)$
    

    In order to deactivate your virtualenv:

    (myenv)$ deactivate
    

    Here is my tutorial, step by step on how to install virtualenv and virtualenvwrapper.

    0 讨论(0)
  • 2020-11-27 09:29

    Usually, activating a virtualenv gives you a shell function named:

    $ deactivate
    

    which puts things back to normal.

    I have just looked specifically again at the code for virtualenvwrapper, and, yes, it too supports deactivate as the way to escape from all virtualenvs.

    If you are trying to leave an Anaconda environment, the command depends upon your version of conda. Recent versions (like 4.6) install a conda function directly in your shell, in which case you run:

    conda deactivate
    

    Older conda versions instead implement deactivation using a stand-alone script:

    source deactivate
    
    0 讨论(0)
  • 2020-11-27 09:30

    Use:

    $ deactivate 
    

    If this doesn't work, try

    $ source deactivate
    

    Anyone who knows how Bash source works will think that's odd, but some wrappers/workflows around virtualenv implement it as a complement/counterpart to source activate. Your mileage may vary.

    0 讨论(0)
  • 2020-11-27 09:32

    I had the same problem while working on an installer script. I took a look at what the bin/activate_this.py did and reversed it.

    Example:

    #! /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())
    

    I am not 100% sure if it works as intended. I may have missed something completely.

    0 讨论(0)
  • 2020-11-27 09:33

    I defined an alias, workoff, as the opposite of workon:

    alias workoff='deactivate'
    

    It is easy to remember:

    [bobstein@host ~]$ workon django_project
    (django_project)[bobstein@host ~]$ workoff
    [bobstein@host ~]$
    
    0 讨论(0)
提交回复
热议问题