参考:http://www.cnblogs.com/wilber2013/p/4774022.html virtualenv documentation: https://virtualenv.pypa.io/en/latest/ virtualenvwrapper documentation: http://virtualenvwrapper.readthedocs.org/en/latest/http://docs.python-guide.org/en/latest/dev/virtualenvs/http://pythonguidecn.readthedocs.io/zh/latest/dev/virtualenvs.html virtualenv 中文文档地址 : http://virtualenv-chinese-docs.readthedocs.io/en/latest/#
https://docs.python.org/3/library/venv.html
Python3.3 以上的版本通过 venv 模块 原生支持虚拟环境,可以代替 Python之前的 virtualenv。该 venv模块 提供了创建轻量级“虚拟环境”,提供与系统 python 的隔离支持。每一个虚拟环境都有其自己的 Python二进制(允许有不同的Python版本创作环境),并且可以拥有自己独立的一套 Python包。需要注意的是,在Python3.3中使用 ”venv” 命令创建的环境不包含”pip”,你需要进行手动安装。在 Python3.4 中改进了这一个缺陷。
首先,我们先在某个目录下(最后是根目录或者是桌面,关键是下次要用能够找得到),输入:
$ python3 -m venv XXXXXX 指你要创建的文件名。因为在执行这行命令之后,就会把与 Python 虚拟环境有关的文件放到 XXX 里面。 之后只需要运行这个里面的 activate 文件就行。Linux下的命令如下:
$ source <XXX>/bin/activateWindows 的 cmd 下是:
C:> <XXX>/Scripts/activate.bat在PowerShell下是:
PS C:> <venv>/Scripts/Activate.ps1但是为了避免运行不信任的脚本,PowerShell 下此脚本可能被禁止。此时输入命令:
set-executionpolicy remotesigned然后更改执行策略就可以了。
退出环境之前输入:
$ deactivate
冻结(freeze) 环境:就是将当前环境的软件包等保存下来:
$ pip freeze > requirements.txt$ $ cat requirements.txt重建(rebuild) 环境:就是在部署的时候,在生产环境安装好对应版本的软件包,不要出现版本兼容 等问题.
$ pip install -r requirements.txt 配合pip,可以批量安装对应版本的软件包,快速重建环境,完成部署对于每个虚拟环境,都可以通过下面的命令很方便的进行环境部署:
pip freeze > requirements.txt 将包依赖信息保存在requirements.txt文件pip install -r requirements.txt 会自动从网上下载并安装所有包virtualenv 就是一个搭建虚拟化的 python 环境,便于不同的项目在同一台机器上开发运行。virtualenv 更多的还是适用于本地开发不同的项目,但是在生产环境中还是使用 docker 给不同的项目创建不同的容器,各自分开运行为好,不宜放在一个单独的物理机中运行。
由于Python 的版本众多,还有 Python2 和 Python3 的争论,因此有些软件包或第三方库就容易出现版本不兼容的问题。同时在python 开发中,我们可能会遇到一种情况,就是当前的项目依赖的是某一个版本,但是另一个项目依赖的是另一个版本,这样就会造成依赖冲突。
对于上面的问题,已经有很多现成的个工具可以解决。根据解决上面问题的方法,这些工具大概可以分为两类:
Python 版本 环境 切换工具(不同的真实Python环境)特定 Python 版本 虚拟环境 切换工具(Python 虚拟环境)
Python 版本环境切换工具的作用就是让多个不同版本的 Python 可以在系统上共存。并且提供简单的命令来支持不同 Python 版本之间的切换。
工具介绍pyenv目前最流行的 python版本环境切换工具,但是不支持 WindowspywinWindows 上pyenv 的替代品,但是功能相对 pyenv 比较少py.exePython 3.3 版本以后 Windows 系统自带的启动工具(Python Launcher for Windows),可以直接在命令行中使用
简单的说,虚拟环境切换工具就是可以根据当前使用的Python版本环境来创建多个虚拟的Python环境。这些虚拟的环境之间相互独立,可以安装各个环境所需的Python包。
工具介绍virtualenv目前最流行的 python虚拟环境 配置工具virtualenvwrapper使用shell开发,是对 virtualenv 的一个封装,简化了virtualenv 命令的使用,并且进行了一些功能扩展virtualenvwrapper-win使用 Windows batch shell 开发的 virtualenvwrappervenvPython 3.3 版本以后自带的虚拟环境工具,仅支持 python 3.3 和以后版本
From: https://my.oschina.net/lionets/blog/267469
pyenv 可以帮助你在 一台开发机上建立多个版本的 python 环境, 并提供方便的切换方法。virtualenv 则提供了一种功能, 就是将一个目录建立为一个虚拟的python环境, 这样的话, 用户可以建立多个虚拟环境, 每个环境里面的python版本可以是不同的, 也可以是相同的, 而且环境之间相互独立。 如果解释得还不是很清楚的话,我们举例说明:首先我们可以用pyenv 安装多个python 版本, 比如安装了2.5, 2.6, 3.3 三个版本。 用户可以随意切换当前默认的python版本。 但这时候, 每个版本的环境仍是唯一的, 如果我们想在环境中安装一些库的话, 还是会导致这个版本的环境被修改。 这个时候, 如果我们用virtual env去建立虚拟环境, 就可以完全保证系统路径的干净。无论你在虚拟环境中安装了什么程序, 都不会影响已安装版本的系统环境。
现在看看 Windows上Python版本环境切换工具 pywin。
对于pywin的工作原理就可以简单的理解为,通过pywin提供的命令可以简单的以设置环境变量的方式决定优先使用特定版本的Python。
安装
对于pywin,我们可以使用源码、easy_install和pip三种方式进行安装,关于这些安装方式的关系,请参考前一篇文章。
下面通过pip来安装pywin:
常用命令
安装完成之后就看看pywin的常用命令。
"pyassoc"和"pywin genlaunchers"是两个配置相关的命令。我本机安装了2.7和3.4两个版本的Python,默认环境变量指向2.7,配置完成后就会就会在2.7目录中生成本机安装所
有Python版本的launcher。
配置完成之后,就可以通过pywin进行不同版本之间的Python切换了。
1. 打开环境变量PAHT中第一个Python版本环境
C:\Users\tianw1>pywin Python 2.7.7 (default, Jun 1 2014, 14:17:13) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> exit()2. 打开Python 3.4
C:\Users\tianw1>pywin -3.4 Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> exit()3. 将Python 3.4设置为默认的Python执行环境,根据输出也可以看出,其实就是将Python 3.4目录放在环境变量PATH的前面位置
C:\Users\tianw1>pywin setdefault 3.4 Setting default python for active session to: 3.4 C:\Python34;C:\Python34\Scripts -- now at front of PATH # 由于Python 3.4中没有安装pywin,所以会报错 C:\Users\tianw1>pywin 'pywin' is not recognized as an internal or external command, operable program or batch file. C:\Users\tianw1>python Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> exit()4. 即使上面通过pywin将默认Python版本环境设为3.4,但是由于文件的查找还是先本地,然后环境变量PATH。所以,下面方式使用的还是2.7版本,同时也可以再通过pywin将2.7设置为默认Python版本环境。
C:\>cd Python27 C:\Python27>python Python 2.7.7 (default, Jun 1 2014, 14:17:13) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> exit() C:\Python27>pywin setdefault 2.7 Setting default python for active session to: 2.7 C:\Python27;C:\Python27\Scripts -- now at front of PATH C:\Python27>
在 Windows环境中使用 "virtualenvwrapper-win" 还是比较方便的。
安装。同样使用 pip 进行安装:pip install virtualenvwrapper-win
常用命令。安装完成之后,就可以直接使用"virtualenvwrapper-win"提供的命令来创建虚拟环境了。
1. 新建虚拟环境:mkvirtualenv env_name
C:\Users\tianw1>mkvirtualenv py27_dev1 New python executable in py27_dev1\Scripts\python.exe Installing setuptools, pip, wheel...done. (py27_dev1) C:\Users\tianw1>pip list pip (7.1.2) setuptools (18.2) wheel (0.24.0)注意,默认情况虚拟环境不会自通引用原始Python环境中的软件包,但是可以通过"--system-site-packages"参数来使虚拟环境引用原始Python环境中的软件包。
C:\Users\tianw1>mkvirtualenv --system-site-packages py27_dev2 New python executable in py27_dev2\Scripts\python.exe Installing setuptools, pip, wheel...done. (py27_dev2) C:\Users\tianw1>pip list2. 离开虚拟环境:deactivate
(py27_dev1) C:\Users\tianw1>deactivate C:\Users\tianw1>3. 列出虚拟环境列表:workon 或 lsvirtualenv
C:\Users\tianw1>workon Pass a name to activate one of the following virtualenvs: ============================================================================== py27_dev1 py27_dev2 C:\Users\tianw1>lsvirtualenv dir /b /ad "C:\Users\tianw1\Envs" ============================================================================== py27_dev1 py27_dev2 C:\Users\tianw1>4. 删除虚拟环境:rmvirtualenv env_name
virtualenv 通过创建一个虚拟化的 python 运行环境,将我们所需的依赖安装进去的,不同项目之间相互不干扰。然后在每个环境中安装需要的软件包(配合 pip 使用),这一系列的环境是相互隔离的。作为一个独立的环境就不容易出现版本问题,还方便部署。
Github: https://github.com/pypa/virtualenvDoc: https://virtualenv.pypa.io/en/latest/
VirtualEnv 用于在一台机器上创建多个独立的 Python 运行环境,VirtualEnvWrapper 为VirtualEnv 提供了一些便利的命令行上的封装。
Virtualenv 可用于创建独立的Python环境,是一个非常好的virtual python environment builder,他最大的好处是,可以让每一个python项目单独使用一个环境,而不会影响python系统环境,也不会影响其他项目的环境。在这些环境里面可以选择不同的Python版本或者不同的Packages,并且可以在没有root权限的情况下在环境里安装新套件,互相不会产生任何的影响。
为什么要用 virtualenv ?
- 隔离项目之间的第三方包依赖,如A项目依赖django1.2.5,B项目依赖django1.3。- 为部署应用提供方便,把开发环境的虚拟环境打包到生产环境即可,不需要在服务器上再折腾一翻。在服务器上都不用安装virtualenv,直接将virtualenv创建的目录拷贝到服务器,修改路径,进行虚拟环境迁移就可以用了。- 还可以用在没有root权限的python环境配置上,如果没有root权限,可以先自己搞一个virtualenv,再在virtualenv中使用pip安装。(系统中没有pip,并且也没有root权限使用sudo apt-get安装)
虚拟环境中安装的库的位置在哪 ?
在虚拟环境中安装的库在 env/Lib/site-packages/目录里,而不是在系统的 python 的 Lib/site-packages 目录里,这就是为什么虚拟环境是分开的。
Note:virtualenv 创建的虚拟环境与主机的 Python 环境完全无关,你主机配置的库不能在 virtualenv 中直接使用。你需要在虚拟环境中利用 pip install 再次安装配置后才能使用。
安装 virtualenv 比较简单,无论是在linux系统上还是windows上都可以通过pip来进行安装,如下:pip install virtualenv 如果安装不成功也可以下载 virtualenv源码 package,通过执行 setup.py 来安装 virtualenv。同时因为 python2 和 python3 的不同,因此也有了两种 pip 和 pip3 两种 python 包安装工具,而两种工具安装的 virtualenv 也是不相同的,py2 安装的 virtualenv 虚拟化出来的python运行环境是python2的,py3安装的virtualenv默认虚拟化环境则是python3的。 网速较好可以通过 pip 来安装, 系统没有 pip 的请参考 pip2 或 pip3
pip install virtualenv pip install setuptools # 如果提示安装就执行这个这时候会发现在 myproject 目录下新增了一个 myproject_ENV 的文件夹。
这时候在命令行的最左边会显示该虚拟环境的名称。不妨使用下面的命令查看一下变化:
which python which pip pip list如果想要退出虚拟环境,使用这个命令就可以了:deactivate
virtualenv 的基本使用
$ virtualenv venv 创建虚拟环境 $ virtualenv -p /usr/bin/python2.7 venv 为环境指定Python解释器: $ source venv/bin/activate 激活虚拟环境 $ deactivate 停止虚拟环境。退出虚拟环境 删除虚拟环境 直接删除目录即可激活虚拟环境之后就可以通过命令pip install 来安装python包了,这里安装python包就不需要root权限了,直接就可以安装十分方便。
在 venv 的环境中,使用 pip 安装的包都不会再是全局性的包,只会在当前的虚拟环境中起作用,避免了污染系统环境。
运行pip带 –no-site-packages 选项的 virtualenv 将不会包括全局安装的包. 这可用于保持包列表干净, 以防以后需要访问它. (这在 virtualenv 1.7及之后是默认行为)
virtualenv 各种其他命令如下:
$ virtualenv [OPTIONS] DEST_DIR 选项: --version 显示当前版本号。 -h, --help 显示帮助信息。 -v, --verbose 显示详细信息。 -q, --quiet 不显示详细信息。 -p PYTHON_EXE, --python=PYTHON_EXE 指定所用的python解析器的版本,比如 --python=python2.5 就使用2.5版本的解析器创建新的隔离环境。 默认使用的是当前系统安装(/usr/bin/python)的python解析器 --clear 清空非root用户的安装,并重头开始创建隔离环境。 --no-site-packages 令隔离环境不能访问系统全局的site-packages目录。 --system-site-packages 令隔离环境可以访问系统全局的site-packages目录。 --unzip-setuptools 安装时解压Setuptools或Distribute --relocatable 重定位某个已存在的隔离环境。使用该选项将修正脚本并令所有.pth文件使用相当路径。 --distribute 使用Distribute代替Setuptools,也可设置环境变量VIRTUALENV_DISTRIBUTE达到同样效要。 --extra-search-dir=SEARCH_DIRS 用于查找setuptools/distribute/pip发布包的目录。可以添加任意数量的–extra-search-dir路径。 --never-download 禁止从网上下载任何数据。此时,如果在本地搜索发布包失败,virtualenv就会报错。 --prompt==PROMPT 定义隔离环境的命令行前缀。使用
[root@localhost home]# virtualenv MTP # 创建名为MTP的虚拟环境 New python executable in /home/MTP/bin/python Installing setuptools, pip, wheel...done. [root@localhost home]# ls # 会在当前目录生成一个目录 MTP [root@localhost home]# cd MTP/ [root@localhost MTP]# ls bin include lib lib64 pip-selfcheck.json [root@localhost MTP]# source ./bin/activate # 启动虚拟环境后, 此时命令行会多一个(MTP) (MTP) [root@localhost MTP]# pip freeze # MTP为虚拟环境名称, 接下来所有模块都只会安装到该目录 (MTP) [root@localhost MTP]# pip list pip (9.0.0) setuptools (28.7.1) wheel (0.30.0a0) (MTP) [root@localhost MTP]# deactivate # 退出虚拟环境, 将回到系统默认的Python解释器环境 [root@localhost MTP]#删除 删除一个虚拟环境, 只需要删除它的目录. 有必要请执行( rm -rf venv )
为了使用 virtualenv 更方便,可以借助 virtualenvwrapper。Virtualenvwrapper 的作用是:更方便的创建/激活/管理/销毁虚拟环境。
Virtaulenvwrapper 是 virtualenv 的扩展包,它提供了一系列命令用于更方便管理虚拟环境,它可以做:
1. 将所有虚拟环境整合在一个目录下2. 管理(新增,删除,复制)虚拟环境3. 切换虚拟环境 …virtualenvwrapper 提供环境名字的 tab 补全功能.
$ sudo pip install virtualenvwrapper 安装 virtualenvwrapper $ source /usr/local/bin/virtualenvwrapper.sh 加载 virtualenvwrapper 创建虚拟环境 默认创建的虚拟环境位于 ~/.virtualenvs ,可以通过环境变量 $WORKON_HOME 来定制。 $ mkvirtualenv test2-env 创建 test2-env 虚拟环境后,会自动激活环境,注意看Shell提示符的改变: (test2-env)CL-USER> test2-env$ $ mkvirtual [环境名称] 创建 虚拟环境 $ lsvirtualenv 列出所有虚拟环境 $ workon test2-env 激活 test2-env 虚拟环境 $ cdvirtualenv 进入到当前激活的虚拟环境的目录中 $ cdsitepackages 进入到当前激活的虚拟环境的 site-packages 目录 $ lssitepackages 列出 site-packages 目录的所有软件包 $ deactivate 停止虚拟环境。离开虚拟环境 $ rmvirtualenv test2-env 删除虚拟环境安装
[root@localhost MTP]# pip install virtualenvwrapper [root@localhost MTP]# echo "export WORKON_HOME=$HOME/.virtualenvs" >> ~/.bashrc [root@localhost MTP]# source ~/.bashrc [root@localhost MTP]# source $(find /usr -type f -name virtualenvwrapper.sh)此时virtualenvwrapper就可以使用了; 对于Windows, 可以使用 virtualenvwrapper-win
或者
安装:sudo easy_install virtualenvwrapper 此时还不能使用virtualenvwrapper,默认virtualenvwrapper安装在/usr/local/bin下面,实际上你需要运行virtualenvwrapper.sh文件才行。 先别急,打开这个文件看看,里面有安装步骤,我们照着操作把环境设置好。
创建目录用来存放虚拟环境 mkdir $HOME/.virtualenvs 在~/.bashrc中添加行: export WORKON_HOME=$HOME/.virtualenvs 在~/.bashrc中添加行:source /usr/local/bin/virtualenvwrapper.sh 运行: source ~/.bashrc 此时virtualenvwrapper就可以使用了。