<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Virtualenv on My Blog</title><link>/tags/virtualenv/</link><description>Recent content in Virtualenv on My Blog</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 27 Jun 2016 00:00:00 +0000</lastBuildDate><atom:link href="/tags/virtualenv/index.xml" rel="self" type="application/rss+xml"/><item><title>Python环境之virtualenv</title><link>/2016/06/27/python%E7%8E%AF%E5%A2%83%E4%B9%8Bvirtualenv/</link><pubDate>Mon, 27 Jun 2016 00:00:00 +0000</pubDate><guid>/2016/06/27/python%E7%8E%AF%E5%A2%83%E4%B9%8Bvirtualenv/</guid><description>&lt;!-- toc --&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;p&gt;在开发Python应用程序的时候，系统安装的Python3只有一个版本：3.4。所有第三方的包都会被&lt;code&gt;pip&lt;/code&gt;安装到Python3的&lt;code&gt;site-packages&lt;/code&gt;目录下。&lt;/p&gt;
&lt;p&gt;如果我们要同时开发多个应用程序，那这些应用程序都会共用一个Python，就是安装在系统的Python 3。如果应用A需要jinja 2.7，而应用B需要jinja 2.6怎么办？&lt;/p&gt;
&lt;p&gt;这种情况下，每个应用可能需要各自拥有一套“独立”的Python运行环境。virtualenv就是用来为一个应用创建一套“隔离”的Python运行环境。&lt;/p&gt;
&lt;p&gt;首先，我们用&lt;code&gt;pip&lt;/code&gt;安装virtualenv：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ pip3 install virtualenv
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;然后，假定我们要开发一个新的项目，需要一套独立的Python运行环境，可以这么做：&lt;/p&gt;
&lt;p&gt;第一步，创建目录：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Mac:~ michael$ mkdir myproject
Mac:~ michael$ cd myproject/
Mac:myproject michael$
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;第二步，创建一个独立的Python运行环境，命名为&lt;code&gt;venv&lt;/code&gt;：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Mac:myproject michael$ virtualenv --no-site-packages venv
Using base prefix &amp;#39;/usr/local/.../Python.framework/Versions/3.4&amp;#39;
New python executable in venv/bin/python3.4
Also creating executable in venv/bin/python
Installing setuptools, pip, wheel...done.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;命令&lt;code&gt;virtualenv&lt;/code&gt;就可以创建一个独立的Python运行环境，我们还加上了参数&lt;code&gt;--no-site-packages&lt;/code&gt;，这样，已经安装到系统Python环境中的所有第三方包都不会复制过来，这样，我们就得到了一个不带任何第三方包的“干净”的Python运行环境。&lt;/p&gt;
&lt;p&gt;新建的Python环境被放到当前目录下的&lt;code&gt;venv&lt;/code&gt;目录。有了&lt;code&gt;venv&lt;/code&gt;这个Python环境，可以用&lt;code&gt;source&lt;/code&gt;进入该环境：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Mac:myproject michael$ source venv/bin/activate
(venv)Mac:myproject michael$
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;注意到命令提示符变了，有个&lt;code&gt;(venv)&lt;/code&gt;前缀，表示当前环境是一个名为&lt;code&gt;venv&lt;/code&gt;的Python环境。&lt;/p&gt;
&lt;p&gt;下面正常安装各种第三方包，并运行&lt;code&gt;python&lt;/code&gt;命令：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;(venv)Mac:myproject michael$ pip install jinja2
...
Successfully installed jinja2-2.7.3 markupsafe-0.23
(venv)Mac:myproject michael$ python myapp.py
...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;在&lt;code&gt;venv&lt;/code&gt;环境下，用&lt;code&gt;pip&lt;/code&gt;安装的包都被安装到&lt;code&gt;venv&lt;/code&gt;这个环境下，系统Python环境不受任何影响。也就是说，&lt;code&gt;venv&lt;/code&gt;环境是专门针对&lt;code&gt;myproject&lt;/code&gt;这个应用创建的。&lt;/p&gt;</description></item></channel></rss>