本文使用的版本是python 2.7 64位。
python安装目录:c:\python27,程序目录是:c:\python27\scripts。
虚环境的作用是让每一个项目运行在独立的环境中,避免不同项目之间的组件使用时的冲突。
比如,某个项目是用python2.7开发,引用的是2.7的库,而另一个项目是python3.5,引用的是3.5的库,如果在同一个环境下很容易导致冲突,现在有了虚环境,每个项目都在自己的环境中运行,引用自己对应python版本的库,避免导致相互冲突。
一、安装虚环境
安装用的是pip,把虚环境安装到当前系统中。
C:\Users\Administrator>cd c:\python27\scripts
c:\Python27\Scripts>pip install virtualenv
Collecting virtualenv
Using cached virtualenv-15.1.0-py2.py3-none-any.whl
Installing collected packages: virtualenv
Successfully installed virtualenv-15.1.0
二、构造虚环境
为一个已有的项目建一个venv目录,会复制一份完整的当前系统的python环境。
比如,现在在E:\Project目录下面,有一个项目是:my_project,要为这个项目创建一个虚环境,用virtualenv命令:
E:\project\my_project>c:\python27\scripts\virtualenv venv
New python executable in E:\project\my_project\venv\Scripts\python.exe
Installing setuptools, pip, wheel...done.
注意:要先切换到E:\Project\my_project目录,然后运行这个virtualenv命令,之后会看到在my_project目录中新增了一个子目录venv,目录中会有完整的python环境,里面会有 scripts、include、Lib等目录:
C:\Users\Administrator>e:
E:\>cd e:\project\my_project\venv
e:\project\my_project\venv>dir
驱动器 E 中的卷是 新加卷
卷的序列号是 F6F5-4ACA
e:\project\my_project\venv 的目录
2016/12/24 周六 23:18 <DIR> .
2016/12/24 周六 23:18 <DIR> ..
2016/12/24 周六 13:10 <DIR> Include
2016/12/24 周六 23:17 <DIR> Lib
2016/12/24 周六 23:18 <DIR> Scripts
2016/12/24 周六 23:17 <DIR> tcl
2016/12/24 周六 23:18 60 pip-selfcheck.json
1 个文件 60 字节
6 个目录 336,256,745,472 可用字节
e:\project\my_project\venv>
现在系统中一共有2个python,一个是 c:\python27\python.exe,另一个就是刚才创建的虚环境中的是 E:\project\my_project\venv\Scripts\python.exe,当然还有其他程序也复制了一份。
三、使用虚环境
接下来在虚环境中安装tornado:
E:\project\my_project\venv\Scripts>pip install tornado
Collecting tornado
Downloading tornado-4.4.2.tar.gz (460kB)
Successfully built tornado
Installing collected packages: six, singledispatch, certifi, backports-abc, tornado
Successfully installed backports-abc-0.5 certifi-2016.9.26 singledispatch-3.4.0.
3 six-1.10.0 tornado-4.4.2
用虚环境运行python程序:
E:\project\my_project\venv\Scripts>python e:\r.py
这是一个python程序:Hello world!
更加简便的使用方式是进入到项目目录,然后用activate命令启动虚环境,之后就不用显式的调用虚环境scripts文件夹中的命令(其实和上面的方式没有区别,都得先进入到E:\project\my_project\venv\Scripts目录):
C:\Users\Administrator>e:
E:\>cd E:\project\my_project\venv\Scripts
E:\project\my_project\venv\Scripts>activate
(venv) E:\project\my_project\venv\Scripts>python E:\r.py
这是一个python程序:Hello world!
(venv) E:\project\my_project\venv\Scripts>pip install tornado
Requirement already satisfied: tornado in e:\project\my_project\venv\lib\site-packages
Requirement already satisfied: singledispatch in e:\project\my_project\venv\lib\site-packages (from tornado)
Requirement already satisfied: certifi in e:\project\my_project\venv\lib\site-packages (from tornado)
Requirement already satisfied: backports-abc>=0.4 in e:\project\my_project\venv\lib\site-packages (from tornado)
Requirement already satisfied: six in e:\project\my_project\venv\lib\site-packages (from singledispatch->tornado)
(venv) E:\project\my_project\venv\Scripts>
这里的(venv) 就表示在虚环境中执行的命令。
如果要退出虚环境,可以用deactivate命令:
(venv) E:\project\my_project\venv\Scripts>deactivate
E:\project\my_project\venv\Scripts>
这样就退出虚环境,回到了cmd命令行。
四、验证环境
这里需要注意的是,上面安装的tornado模块,并不是在当前系统中安装的,而是在虚环境中安装的,如果在当前环境引入tornado会报错:
C:\Users\Administrator>c:\python27\python
Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:53:40) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import tornado
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named tornado
>>>
而在虚环境中引入tornado,就不会报错,因为tornado是安装在虚环境中的:
E:\project\my_project\venv\Scripts>python
Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:53:40) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import tornado
>>>