Python – Virtualenv

Reference: Virtualenv

安装

pip install virtualenv

创建虚拟环境

virtualenv ENV

ENV: 需要创建的虚拟环境的路径。ENV 可以是全局路径,也可以是相对路径。

以上命令创建的 Python 虚拟环境是没有从系统的 Python 中继承任何 Python 库的,是一个新的 Python 环境。其它选项:

  • -p PYTHON_EXE, --python=PYTHON_EXE
    默认创建的虚拟环境的 Python 版本是系统默认的 Python,但是可以通过添加该选项来指定虚拟环境的 Python 版本(前提是系统已有的 Python 版本)。

    virtualenv -p python3.5 ENV
    # or
    virtualenv --python=python3.5 ENV
    
  • --system-site-packages
    默认创建的虚拟环境是没有继承任何 Python 库的,如果需要继承系统默认 Python 的库,可以添加该选项:

    virtualenv --system-site-packages ENV
    
  • --always-copy
    默认情况下,创建虚拟环境需要的文件很多都是从系统软连接过来使用的。如果想要直接复制那些文件到虚拟环境而不是使用软连接,可以添加该选项:

    virutalenv --always-copy ENV
    

    更多参数选项可以参考 virtualenv,或 virtualenv --help

激活虚拟环境

激活虚拟环境,只需要 source 虚拟环境 ENV/bin/activate。如,虚拟环境目录为 /var/virtualenvs/scanner/,当前路径为 /home/lizs/

cd /var/virtualenvs/scanner/
source bin/activate

source /var/virtualenvs/scanner/bin/activate

成功激活之后,当前命令窗口的 python 就处于一个独立的虚拟环境的。pip freeze 可以看到当前的虚拟环境是没有安装任何 Python 的库的。

注意:在虚拟环境下,如果安装时候需要sudo权限 (如,sudo pip install Django),virtualenv 是获取不到sudo权限的。即,用sudo提权时,执行的命令不再在当前虚拟环境。那么,当在 virtualenv 虚拟环境下需要sudo权限安装的时候要怎么做呢?可以这样做:

sudo $(which pip) install Django

执行 which pip 的时候还是在当前虚拟环境下,sudo加命令的绝对路径安装就会自动安装到当前虚拟环境下了。

退出激活状态

如果想要退出激活状态的虚拟环境,可以执行:

deactivate

在非激活状态使用虚拟环境

  • 使用虚拟环境的 python 和相应的库
    如果,想要在非激活状态使用用虚拟环境的 Python 执行 Python 文件,可以指定 Python 解析器的路径为 /path/to/ENV/bin/python

  • 使用全局环境的 python,并且添加虚拟环境中的 python 库
    在 python 环境下,或执行文件中添加以下内容:

    activate_this = '/path/to/env/bin/activate_this.py'
    execfile(activate_this, dict(__file__=activate_this))
    

删除虚拟环境

删除虚拟环境,非激活状态下直接删除虚拟环境下的文件即可:

rm -r ENV